【发布时间】:2017-06-27 14:48:43
【问题描述】:
我必须在一个非常精简的系统上工作。它基于 Ubuntu,但未使用 Ubuntu 安装程序安装。所以它们只是真正必要的包和配置。 QtCreator 已安装并运行。
当我尝试使用非 ASCII 字符创建文件时,该字符被 ? 替换。例如:TestÄ.txt 将被命名为 Test?.txt。但这只发生在我使用 Qt 函数时。 C++ 标准库有效。
例子:
#include <QDebug>
#include <QFile>
#include <fstream>
int main(int, char *[])
{
const char* fileName = "TestÄ.txt";
qDebug() << fileName;
{
QFile f(fileName);
f.open(QIODevice::WriteOnly);
f.write("QFile Äößń\n");
}
{
std::ofstream f;
f.open(fileName, std::fstream::app);
f << "std::ofstream Äößń\n";
}
return 0;
}
应该有一个文件TestÄ.txt,两行。但是第一个块创建文件Test?.txt。第二个块按预期工作。文件内容写入正确。
【问题讨论】:
-
如果你的源文件是Latin1编码的,你可以试试
QFile f(QString::fromLatin1(fileName));Qt5默认是UTF-8。 -
尝试使用
setlocale(LC_ALL, "")设置正确的语言环境。 -
如果问题不是代码,可能是您用于names in the file system 的字符编码。
标签: c++ linux qt ubuntu character-encoding