• 5441阅读
  • 5回复

关于字符转换 [复制链接]

上一主题 下一主题
离线vachin
 

只看楼主 倒序阅读 楼主  发表于: 2006-09-07
关于字符转换
QT里有没有这样的函数,可以将字符的16进制编码,转换成一个字符串

例:"汉字" Unicode编码为: 6C49 5B57

转换成字符串"6C495B57"

我主要用于,中文名文件的字符串命名
离线vachin

只看该作者 1楼 发表于: 2006-09-08
chineseStrTo16Str(const QString& srcStr, QString& destStr)
{
   int length = srcStr.length();

   for (int i=0; i<length; i++)
   {
       QChar ch = srcStr.at(i);
       int n = ch.unicode();
       QString temp;
       temp = QString("%1").arg(n, 0, 16);
       destStr.append(temp.upper());
   }
}

ch.unicode()

但是对于输出后的结果,却是汉字对应的gb2312的码值,这是什么原因
离线wangowen

只看该作者 2楼 发表于: 2006-09-08
这是英文的做法,一个字母只有一个字节,像字母a的ASCII码是0X61,转换成unicode后是0X6100,为什么要后面会加上00呢,因为0x61的最高为为0,所以认为这是ASCII码所以转换后要使它占两个字节,必须扩充,而汉字的在计算机内本身就是以两个字节存储的,汉字的机内码也就是GB2312编码是BABA不需要对它最高位是得到的第一个字节最高位为1,转换后是不会变的。
离线vachin

只看该作者 3楼 发表于: 2006-09-09
但是,

"汉字"

unicode码为 6C49 5B57
而gb2312码为 BABA D7D6

ch.unicode()到底是输出unicode编码,还是扩充后的ascii
离线wylhistory
只看该作者 4楼 发表于: 2006-09-11
你只需要把你的源字符串先转化成unicode就可以了.
比如:
QTextCoec *chinese=QTextCodec::codecForLocale();
QString tempString=chinese->toUnicode(srcString);
然后调用你的函数chineseStrTo16Str(tempString, destStr);
以上在qt3.1上已通过.
离线vachin

只看该作者 5楼 发表于: 2006-09-12

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