c++ - 使用非 unicode 名称创建 QFile

标签 c++ encoding qt4

我有一个 KOI8-R 编码的字符串,它作为 argv 传递,所以最初它是一个 char* 对象。不幸的是,此时使用这种已弃用的编码无济于事。系统locale是KOI8-R,源码也是这个编码。

该字符串是文件的路径,其中一些目录在 KOI8-R 中具有名称。我需要使用 QFile 打开要写入的文件。但是,无论我尝试什么,open() 总是返回 false。

我需要将路径转换为 ​​QString 以将其传递给 QFile 的构造函数,但是,直接转换 QString::fromLocal8Bit() 和 QFile::decodeName() 似乎没有帮助。

char* filename; // This is a KOI8-R string
QFile f(QString::fromLocal8Bit(filename));
// QFile f(QFile::decodeName(filename)) doesn't work too
f.open(QIODevice::WriteOnly | QIODevice::Text); // returns false

我让它工作的唯一方法是在 STL 的 ofstream 对象的帮助下,将 char* 传递给 ofstream 构造函数工作正常,但是,使用 QFile 更可取,因为应用程序是在 QT 中。

最佳答案

解决方案是在对字符串进行任何操作之前添加 QApplication initialization (QApplication a(argc, argv);)。显然,语言环境初始化在 QApplication 构造函数的深处。

关于c++ - 使用非 unicode 名称创建 QFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741771/

相关文章:

c++ - Qt5从局域网获取mjpeg流

c++ - 重复的属性传播规则 (%)

mongodb - 在 Go 中将任何编码转换为 UTF 8

unicode - 比较不同编码的文件

javascript和html字符转义

c++ - 在 c 程序和 C++ Qt 应用程序之间使用什么 Linux IPC?

mysql - 如何在qt中加载驱动程序?

c++ - Visual Studio - 在 Visual Studio 之外运行项目

c++ - 我可以从另一个函数中初始化静态成员吗​​?

c++ - Qt:处理从后台线程的处理程序引发的异常