Ond*_*sky 18 unicode qt4 utf-8
我正在尝试在Qt中创建一个UTF-8编码文件.
#include <QtCore>
int main()
{
QString unicodeString = "Some Unicode string";
QFile fileOut("D:\\Temp\\qt_unicode.txt");
if (!fileOut.open(QIODevice::WriteOnly | QIODevice::Text))
{
return -1;
}
QTextStream streamFileOut(&fileOut);
streamFileOut.setCodec("UTF-8");
streamFileOut << unicodeString;
streamFileOut.flush();
fileOut.close();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我认为当QString默认为Unicode时,当我将输出流的编解码器设置为UTF-8时,我的文件将是UTF-8.但它不是,它是ANSI.我做错了什么?我的琴弦有问题吗?你能纠正我的代码来创建UTF-8文件吗?对我来说,下一步将是读取ANSI文件并将其保存为UTF-8文件,因此我将不得不对每个读取字符串执行转换,但现在,我想从一个文件开始.谢谢.
Ser*_*nov 16
你的代码绝对正确.对我来说唯一可疑的部分是:
QString unicodeString = "Some Unicode string";
Run Code Online (Sandbox Code Playgroud)
您确实意识到,您不能只将Unicode字符串放在引号中,对吗?默认情况下,QString使用Latin1,所以如果它只是重音字符,你可能会很好,但更好的是你的源代码用UTF-8编码并执行此操作:
QString unicodeString = QString::fromUtf8("Some Unicode string");
Run Code Online (Sandbox Code Playgroud)
这适用于任何可以想象的语言.使用QObject :: trUtf8()更好,因为它为您提供了大量的i18n功能.
编辑
虽然您生成正确的UTF-8文件是正确的,但如果您希望记事本将您的文件识别为UTF-8,那么这是一个不同的故事.你需要在那里放一个BOM.它可以按照另一个答案中的建议完成,或者这是另一种方式:
streamFileOut.setGenerateByteOrderMark(true);
Run Code Online (Sandbox Code Playgroud)
小智 8
我通过QT创建没有BOM的UTF-8编码的经验如下:
file.open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream out(&file);
out.setCodec("UTF-8"); // ...
vcfline = ctn; //assign some utf-8 characters
out.setGenerateByteOrderMark(false);
out << vcfline; //.....
file.close();
Run Code Online (Sandbox Code Playgroud)
该文件将编码UTF-8而不使用BOM.
| 归档时间: |
|
| 查看次数: |
18848 次 |
| 最近记录: |