• 4239阅读
  • 6回复

[提问]unicode 的显示问题 [复制链接]

上一主题 下一主题
离线vbroot
 

只看楼主 倒序阅读 楼主  发表于: 2013-04-23
  1. QByteArray ba;
  2.     ba="\u6c49\u5b57";
  3.     ui->plainTextEdit->appendPlainText(ba);
  4. // 环境QT 5.0.5 + mingw4.7 +qtcreator
  5. //上面这段代码能正确显示汉字
  6. //下面的这代码却无法显示汉字 是不是要用其它方法实现转码?ba=str.toLatin1();不能转么?
  7.     QString str;
  8.     QByteArray ba;
  9.     str=ui->plainTextEdit->toPlainText();  //str="\u6c49\u5b57"
  10.     ba=str.toLatin1();
  11.     ui->plainTextEdit->appendPlainText(ba);



离线dbzhang800

只看该作者 1楼 发表于: 2013-04-23
你的第一段代码和第二段代码涉及的几乎是完全不相同的问题。前者与编译器关系密切,后者与编译器没多大关联。
离线vbroot

只看该作者 2楼 发表于: 2013-04-23
没怎么听懂,可否再给点建议?
我要第二段代码出来的结果与第一段的一样。
难道我要一个字节一个字节的转到QByteArray中去?

离线dbzhang800

只看该作者 3楼 发表于: 2013-04-23
好吧,我再猜测一下:你真正想表达的问题是 将界面中显示的  \u6c49\u5b57 这12个字符 转换成字面量 "\u6c49\u5b57" 对应这2个unicode字符,对么?

换句话说,你是想将下面的 str1 变成 str2 ?
const char * str1 = "\\u6c49\\u5b57";
const char * str2 = "\u6c49\u5b57";
离线vbroot

只看该作者 4楼 发表于: 2013-04-23
引用第3楼dbzhang800于2013-04-23 13:59发表的  :
好吧,我再猜测一下:你真正想表达的问题是 将界面中显示的  \u6c49\u5b57 这12个字符 转换成字面量 "\u6c49\u5b57" 对应这2个unicode字符,对么?
   对
  我是想做个编码转换的工具。
  在plainTextEdit控件中输入  \u6c49\u5b57  然后在另外的一个plainTextEdit中显示对应的中文字符  “汉字”


离线dbzhang800

只看该作者 5楼 发表于: 2013-04-23
那就自己一个一个字符进行解析吧,反正对BMP来说,u后面对应的就是utf16的值。

题外:QByteArray对你没用。
离线vbroot

只看该作者 6楼 发表于: 2013-04-23
好吧,我也没有其它的方法。暂时就一个一个字节的处理吧。

代码大概是这样的
  1. QString ss;
  2.     QString str=ui->plainTextEdit->toPlainText();  //str= "\u6c49\u5b57"
  3.     ui->plainTextEdit->clear();
  4.     str.replace("\\u","");
  5.     int n=0;
  6.     for (int  i= 0;  i< str.length(); i+=4) {
  7.         n=str.mid(i,4).toInt(0,16);
  8.         qDebug()<<n;
  9.         qDebug()<<QChar(n);
  10.         ss.append(QChar(n));
  11.     }
  12.     ui->plainTextEdit->appendPlainText(ss);


快速回复
限100 字节
 
上一个 下一个