我有一个 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/