我正在编写一个QT5应用程序(使用QT Creator),它使用十二生肖等特殊字符。这段代码在Linux Mint 14上运行得非常好:
QString s = QString :: fromUtf8(“\ u2648”);
但是当我在Windows XP SP3上编译它时,会收到编译器警告,指出当前代码页是cp1252并且字符\ u2648无法转换。当我运行程序时,该字符显示为问号。
根据我的系统设置,我的Windows上安装了UTF8(代码页65001)。
答案 0 :(得分:1)
(注意,我没试过这个,我不知道你使用的是哪个编译器,而且我对QT完全不熟悉,所以我可能错了。以下是基于Windows上的Unicode的一般知识。)
在Windows上,通常假定8位字符串位于系统的当前代码页中(也称为“ANSI”代码页)。这是从不 UTF-8。在你的系统上,它显然是cp1252。所以实际上有两件事出了问题:
在Linux系统上,两者都“偶然”工作,因为它使用UTF-8作为8位字符串。
要做到这一点,请立即以UTF-8指定8位字符串:
QString s = QString::fromUtf8("\xE2\x99\x88");
答案 1 :(得分:-1)
我的建议是让工作顺利进行:
只有一种编码类型UTF-8!尽可能在任何地方使用它。因此,在QtCreator设置中为源UTF-8设置默认代码页。
您可以在QtCreator中转换源代码:edit - >选择编码并在代码页中重新加载。如果无法完成,请以这种方式使用linux控制台应用程序iconv
:
iconv -f cp1252 -t utf-8 your_source_in_cp1251.cpp> your_source_in_utf8.cpp
我在源代码中将此代码段用于C字符串:在main.cpp
添加#include <QTextCodec>
,然后执行:
// For correct encoding
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForCStrings(codec);