• 2928阅读
  • 5回复

[提问]中文问题!郁闷!求助 [复制链接]

上一主题 下一主题
离线hpplel
 

只看楼主 倒序阅读 楼主  发表于: 2018-07-20
       QString fname="123大家好abc.docx";
       QString tmp=QString::fromLocal8Bit("123大家好abc.docx");
       if(fname.compare(tmp)==0) qDebug()<<"equal";


如上。中文系统。为什么两者不等啊?又是编码问题?哎,这个编码搞死我来,看了好多也没怎么弄懂!~
离线linker

只看该作者 1楼 发表于: 2018-07-23
希望你可以多看看Qt的帮助文档。
1.
  1. One way to initialize a QString is simply to pass a const char * to its constructor. For example, the following code creates a QString of size 5 containing the data "Hello":
  2.   QString str = "Hello";
  3. QString converts the const char * data into Unicode using the [backcolor=#ffff00]fromUtf8()[/backcolor] function.
2.
  1. [static] QString QString::fromLocal8Bit(const char *str, int size = -1)
  2. Returns a QString initialized with the first size characters of the 8-bit string str.
  3. If size is -1 (default), it is taken to be strlen(str).
  4. [backcolor=#ffff00]QTextCodec::codecForLocale() is used to perform the conversion.[/backcolor]
已上代码引用Qt帮助文档。
所以明白了吗?
QString str = "你好abc"; //使用的是utf8编码
QString str = QString::fromLocal8Bit("使用的是本地编码");

你可以这样:
  1. QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
  2.     QString str1 = "你好abc";
  3.     QString str2 = QString::fromLocal8Bit("你好abc");
  4.     qDebug() << (str1.compare(str2) == 0 ? "true" : "false");
这样是相等的。

Qt还是很不错的,既然想学,有问题了还是要学着看看帮助文档,不要怕英文,祝好。
做土豆长大的孩纸
离线hpplel

只看该作者 2楼 发表于: 2018-07-24
多谢楼上!说得很明白了!~努力看帮助文档~!!!
离线九重水

只看该作者 3楼 发表于: 2018-07-24
时到今日,为什么还有人往代码里直接写非ascii码字符,而不是采用翻译的方式了?
离线hpplel

只看该作者 4楼 发表于: 2018-07-24
回 九重水 的帖子
九重水:时到今日,为什么还有人往代码里直接写非ascii码字符,而不是采用翻译的方式了?[表情]
 (2018-07-24 10:56) 

小白请您详细说说!~
离线linker

只看该作者 5楼 发表于: 2018-07-24
意思是用tr("")包起来,再使用翻译文件,可以避免中文编码导致的一系列问题
做土豆长大的孩纸
快速回复
限100 字节
 
上一个 下一个