我必须在一个非常简化的系统上工作。它基于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
。第二个块按预期工作。文件内容写得正确。
答案 0 :(得分:2)
未设置系统区域设置。我没有意识到这一点,因为有人在.bashrc
中添加了配置,因此在终端中设置了区域设置。
要解决此问题,我创建了文件/etc/default/locale
,内容为:
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"
答案 1 :(得分:0)
可能是因为您的编译器不知道如何处理源文件中的Ä
。
你可以试试"Test\xC3\x84.txt"
(如果你有C ++ 17,可以u8"TestÄ.txt"
。)
另请注意,QFile
构造函数会将char数组转换为QString。如果你想检查一下这是怎么回事,你可以添加:
qDebug() << QString(fileName).toUtf8().toHex(); // Should print "54657374c3842e747874"
并检查0xC384
是否有Ä
。