正在创建具有非unicode名称的QFile



我有一个KOI8-R编码的字符串,它作为argv传递,所以最初它是一个char*对象。不幸的是,使用这种不推荐使用的编码在这一点上没有帮助。系统区域设置为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中的流对象的帮助下,将char*传递到流构造函数可以很好地工作,然而,由于应用程序在QT中,所以使用QFile更可取。

解决方案是添加QApplication初始化(QApplication a(argc,argv);)在用绳子做任何事情之前。显然,区域设置初始化位于QApplication构造函数的深处。

您确定系统使用具有KOI8-R编码的区域设置吗?Qt使用默认区域设置的编码来访问文件,因此,如果它是使用UTF-8的文件,它将无法打开名为KOI8-R的文件。

如果区域设置不同,您应该能够创建一个自定义编码函数(例如使用QTextCodec)来覆盖它,并将QFile设置为使用QFile::setEncodingFunction()

最新更新