Qt实现16进制unicode转utf-8以及国际音标编码问题
2015-12-27 05:11
519 查看
由于项目需要,需要对网络资源进行解码。遇到编码问题。研究了下基本编码原理。于是有了下面两个通用代码
[cpp] view plaincopy
1. 16进制unicode转换为utf-8中文显示
QString unicodeToUtf_8(const QString &resStr)
{
// unicode转utf-8 思路: 一个unicode编码占用2字节。所以只需要用4个16进制数字结合表示就行了
QString temp;
for (int i = 0; i< resStr.length();)
{
if (resStr.at(i) == '\\')
{
QString str = resStr.mid(i+2, 4);
temp.append(str.toUShort(0, 16));
i += 6;
}
else
{
temp.append(resStr.at(i));
++i;
}
}
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QString desStr = codec->fromUnicode(temp);
return QObject::trUtf8(desStr.toLatin1().data());
}
2. 如何显示网络中返回的16进制unicode编码的音标??
QString getTheDecodeSymbol(const QString &resStr)
{
// 如何把16进制的unicode编码音标显示在窗口中?
// 比如: \u00a0[\u026an\u02c8ta\u026at(\u0259)lm\u0259nt]
// 解码思路如下: 先把16进制unicode编码转换为 10进制unicode编码
// 转换方法就是下面的代码
// 那么如何显示呢?
// 借助QLabel的设置字体
// tr("<span style='font-family:\"MS Mincho\";'>%1</span>").arg(data);即可
QString desStr;
for (int i = 0; i< resStr.length();)
{
if (resStr.at(i) == '\\')
{
QString str = resStr.mid(i+2, 4);
desStr.append(tr("%1;").arg(str.toInt(0, 16)));
i += 6;
}
else
{
desStr.append(resStr.at(i));
++i;
}
}
return desStr;
}
http://blog.csdn.net/wu5151/article/details/47107051
[cpp] view plaincopy
1. 16进制unicode转换为utf-8中文显示
QString unicodeToUtf_8(const QString &resStr)
{
// unicode转utf-8 思路: 一个unicode编码占用2字节。所以只需要用4个16进制数字结合表示就行了
QString temp;
for (int i = 0; i< resStr.length();)
{
if (resStr.at(i) == '\\')
{
QString str = resStr.mid(i+2, 4);
temp.append(str.toUShort(0, 16));
i += 6;
}
else
{
temp.append(resStr.at(i));
++i;
}
}
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QString desStr = codec->fromUnicode(temp);
return QObject::trUtf8(desStr.toLatin1().data());
}
2. 如何显示网络中返回的16进制unicode编码的音标??
QString getTheDecodeSymbol(const QString &resStr)
{
// 如何把16进制的unicode编码音标显示在窗口中?
// 比如: \u00a0[\u026an\u02c8ta\u026at(\u0259)lm\u0259nt]
// 解码思路如下: 先把16进制unicode编码转换为 10进制unicode编码
// 转换方法就是下面的代码
// 那么如何显示呢?
// 借助QLabel的设置字体
// tr("<span style='font-family:\"MS Mincho\";'>%1</span>").arg(data);即可
QString desStr;
for (int i = 0; i< resStr.length();)
{
if (resStr.at(i) == '\\')
{
QString str = resStr.mid(i+2, 4);
desStr.append(tr("%1;").arg(str.toInt(0, 16)));
i += 6;
}
else
{
desStr.append(resStr.at(i));
++i;
}
}
return desStr;
}
http://blog.csdn.net/wu5151/article/details/47107051
相关文章推荐
- Qt实战之开发软件数据获取助手(eventFilter处理鼠标按下,event处理鼠标松开)
- Qt快速入门学习笔记(画图篇)
- QT 模拟鼠标点击的例子
- 解决 QT “调试器未设置”问题
- QT QSplitter随窗口自适应大小(Autosize)
- QT+2008VS资源文件的使用
- QT network
- QT安装经验
- 编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件
- Qt5中创建及使用自定义插件遇到的一些问题
- Qt5:自定义窗口部件 | How to Create Qt Plugins in Qt5
- 自定义的插件如何加载到Qt Designer中(详细)
- [原]Qt Designer中自定义控件的使用(提升法与插件法)
- QtXlsx读写.xlsx基本内容
- Qt Script
- Pyqtdeploy Complie Win32 Version PyQtWin32静态编译记录
- QTableView用法小结
- Tslib和Qt 4.8.4与在开发板上的移植
- Qt Creator的配置和开发初步测试
- MQTT协议简记