【发布时间】:2017-02-23 02:49:48
【问题描述】:
我正在使用 Qt5 和 Visual Studio 2012,最近编写了一个记录器类,它基本上将字符串流重定向到文件。前几天我意识到没有“特殊”字符支持(例如波兰语、德语、俄语)。
qDebug() << "Special characters: ąężźćłóĄĘŻĆŁÓ";
正在产生以下输出:
Special characters: �꿟����ʯƣ�
我尝试了多个 Unicode 设置在 File 中侦听 -> Advanced Save Options。
但是,如果没有BOM 签名,则无法保存文件,我认为这可能是问题所在,因为当我通过 Notepad++ 将文件编码更改为UTF-8 (without BOM),然后编译时,一切正常...不幸的是,直到我在 Visual Studio 中进行任何更改。
我也尝试将编译器编码设置为 Unicode:
Visual Studio 有什么解决方案可以在没有 BOM 签名的情况下将编码更改为 UTF-8?
写入文件的代码 sn-p:
file = new QFile;
file->setFileName(fileName);
file->open(QIODevice::Append | QIODevice::Text);
[..]
QTextStream out(file);
out.setCodec("UTF-8");
out << QDateTime::currentDateTime().toString("dd.MM.yyyy hh:mm:ss ") << value << "\n";
我也一直在尝试使用value.toUtf8()。
【问题讨论】:
-
如果您在十六进制查看器中查看文件,除了 BOM 之外,从 VS-2012 和 Notepad++ 保存为 UTF-8 时,它看起来是否相同?
-
@RichardCritten No. 顺便说一句。 VS-2012 UTF-8 编码在 Notepad++ 中被检测为
UCS-2 LE (Little Endian) BOM。 -
这是控制台窗口输出吗?本机 windows 输出应该没问题。转换为 UTF-16 并使用 MessageBox 显示。顺便问一下,您使用的是哪个 Windows 版本? Vista,7,8,10...?
-
@BarmakShemirani 是的,它被打印在控制台输出中(仅在调试版本中),并且它被写入日志文件,尽管我并不真正关心控制台输出,因为正如我所说,我这里只靠文件输出。
-
让我们暂时忘记控制台输出。显示写入文件的代码(可能以 UTF-8 写入),并显示读取 UTF-8 文件的代码。请注意,Windows 使用 UTF-16,因此如果没有正确转换,本机 Windows 程序将无法读取 Qt 程序。
标签: c++ visual-studio qt visual-studio-2012 encoding