• 13357阅读
  • 9回复

关于Qt utf-8到utf-16的转换问题 [复制链接]

上一主题 下一主题
离线dancy
 
只看楼主 倒序阅读 楼主  发表于: 2009-11-10
使用GSM手机模块发送PDU格式短信,需要将Qt程序中默认的utf-8编码的汉字,转换为utf-16编码
试过QTextCodec类、QString的uft16(), fromUtf16() 以及 setUtf16() 函数,都没能解决
不知Qt是否带有解决的方法?
先谢谢各位大侠啦!!!
离线dbzhang800

只看该作者 1楼 发表于: 2009-11-10
楼主提到的这个问题 应该不存在。

Qt内的字符串都是采用 Unicode 存储的,不涉及utf-8的问题。
而目前 Unicode 的 ucs2 与 utf16 在目前实际上是一样的,不存在转换关系

const ushort * QString::utf16 () const

Returns the QString as a '\0'-terminated array of unsigned shorts. The result remains valid until the string is modified.
离线dancy
只看该作者 2楼 发表于: 2009-11-11
引用第1楼dbzhang800于2009-11-10 13:14发表的 :
楼主提到的这个问题 应该不存在。
Qt内的字符串都是采用 Unicode 存储的,不涉及utf-8的问题。
而目前 Unicode 的 ucs2 与 utf16 在目前实际上是一样的,不存在转换关系
.......


我写了一段测试程序,将 QString s("试试看看"); 的unicode编码的十六进制转化为QString打印出来,是如下结果:
e8af95e8af95e79c8be79c8b

手工转换为二进制,确实不是ucs2(即utf-16),而是三字节的utf-8
相应的utf-16的十六进制代码应该是:
8bd58bd5770b770b

所以产生如上问题。。。请问楼上为什么说不涉及utf-8呢?
另外我试了一下,使用utf-16()、fromUtf16()、setUtf-16
以及使用QTextCodec类,都没能实现将"e8af95e8af95e79c8be79c8b"转化为"8bd58bd5770b770b"
不知是否使我使用错误,还是另外有方法可以实现?
[ 此帖被dancy在2009-11-11 10:04重新编辑 ]
离线dbzhang800

只看该作者 3楼 发表于: 2009-11-11
额,贴个一个小例子

附件: unicode.zip (13 K) 下载次数:74
离线dancy
只看该作者 4楼 发表于: 2009-11-11
非常感谢您给我的例子!!

但还是有问题,就是从界面上取得字符“试试看看”,是utf-16的编码,
这是使用unicode()、utf16()函数没有问题
但如果将 QString t = ui->lineEdit->text(); 改为:QString t ("试试看看");
“试试看看”的编码就变为utf-8,不知该怎么转为ucs2了
离线dbzhang800

只看该作者 5楼 发表于: 2009-11-11
引用第4楼dancy于2009-11-11 11:13发表的  :
非常感谢您给我的例子!!
但还是有问题,就是从界面上取得字符“试试看看”,是utf-16的编码,
这是使用unicode()、utf16()函数没有问题
但如果将 QString t = ui->lineEdit->text(); 改为:QString t ("试试看看");
.......


哦,你这样说就清楚了,因为你并没有把“试试看看”这四个汉字存到QString中,而是存了一些你自己不清楚的东西进去了

QString内部是采用unicode存储的,如果你的源代码采用的保存格式是utf8,那么你应该QString t= QString::fromUtf8("试试看看"); 如果你用的简体中文的windows,且源代码保存为 gbk格式,那么 QString t= QString::fromLocal8Bit("试试看看")

题外,源码中出现中文一般不是好主意
[ 此帖被dbzhang800在2009-11-11 12:32重新编辑 ]
离线dancy
只看该作者 6楼 发表于: 2009-11-11
哦……原来是这样,谢谢谢谢!!
离线xiangliuweb

只看该作者 7楼 发表于: 2009-11-12
一同学习。
用internationalization吧
离线zou110
只看该作者 8楼 发表于: 2012-06-15
有用,学习
离线wjian10

只看该作者 9楼 发表于: 2012-11-09
感谢3楼的程序


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