正在创建具有非unicode名称的QFile
Creating a QFile with non-unicode name
我有一个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()
。
相关文章:
- C++ - Unicode Newline
- 如何将unicode字符串从C++传递到delphi
- ascii 和 unicode 在处理级别有什么区别吗?
- 如何从QFile阅读?它显示该文件不可访问
- QDial:如何将 int 值传递给需要常量字符*的 Qfile?
- 无法从 std::string 中提取C++ Unicode 符号
- QDataStream 读取和写入的字节数比 QFile::length() 报告要多
- MinGW64 - Unicode 源文件错误?
- 使用 Visual Studio 2019 编译 Unicode
- 将ANSI C字符串转换为UNICODE
- Qt 写入 xml: QIODevice::write (QFile, "D:/logs.xml" ): 设备未打开
- 如何从 oracle 数据库 c++ 读取 unicode
- 在特定 Unicode 路径中创建文件
- 如何存储 unicode 字符并将其输出到文件?
- C++ wmain 函数错误时使用 Unicode
- C++:打印 Unicode 字符
- QTextStream,用于打印英语和Unicode 16
- 将 unicode 字符串与 c ++ 符号进行比较?
- QFile::打开失败,并显示 unicode 文件名
- 正在创建具有非unicode名称的QFile