QT:QString 字符串和中文字符编码

来源:互联网 发布:求100以内的素数算法 编辑:程序博客网 时间:2024/05/16 09:08

QString 字符串和中文字符编码

QT内部的编码方式 Unicode (utf-16)
linux平台默认使用:utf-8
windows平台默认使用:gbk2312/gbk/gbk18030

QString内部使用Unicode编码,使用双引号的字符串,通过转换构造函数,可以将utf-8编码字符转换为Unicode的使用,也可以正常显示utf-8编码的字符串。
早期的Qt4版本不会做这样的转换,那么显示中文将乱码,获取在Windows开发qt程序,一般使用gbk的编码,显示中文也将是乱码。

<tips>
VMware虚拟机共享与ubuntu共享文件夹:
【虚拟机】-【设置】-【选项】-【共享文件夹】-【添加】-新建目录file
ubuntu虚拟系统中vi终端下访问windows共享目录路径:
" /mnt/hgfs/... "  /mnt/hgfs/file
【注】最好不要用中文路径,使用英文路径。

如果出现"乱码解决方案":
QTextCodec类可以实现将其他编码方式(gbk)转换成(Unicode)。
eg:
 // "中文字符串" 直接使用将是乱码
 QByteArray encodedString = "中文字符串";
 // 构建编码器对象,参数为当前所使用的编码方式
 QTextCodec *codec = QTextCodec::codecForName("GBK");
 // 使用编码对象调用成员函数 toUnicode 完成转换后,就可正常显示
 QString string = codec->toUnicode(encodedString);

/* 代码演示 */#include <QApplication>#include <QLabel>#include <QTextCodec>int main (int argc, char** argv) {    // 创建一个Qt的应用程序对象    QApplication app (argc, argv);    // 1) 构造编码对象 【目前ubuntu下vim的默认编码为utf-8】    QTextCodec* coder = QTextCodec::codecForName ("utf-8");    // 创建一个标签对象    // 2) 将要显示的字符串转换为Unicode编码    QLabel label (coder->toUnicode ("你好, Qt!"));    // 显示标签对象    label.show ();     // 让我的程序进入事件循环    return app.exec (); }

练习:
 构建QPushButton按钮对象,按钮对象内容“按我”;
 1)用vi编辑器写源代码,构建(6步),结果可以直接显示中文
 2)将程序Button.cpp拷贝到Windows共享目录
  共享目录创建方式参见刚才的<tips>
 3)使用记事本打开,另存为,编码方式选择ANSI编码(中文GBK)
 4)将ANSI编码方式的源代码拷贝回ubuntu替换原来的代码
 5)再次make构建运行,结果将是乱码
 6)设置编码对象(GBK),转换为Qt内部的Unicode编码,再次make,结果将正常的显示中文。

/** 练习代码 **/#include <QApplication>#include <QPushButton>#include <QTextCodec>int main (int argc, char** argv) { QApplication app (argc, argv); QTextCodec* coder = QTextCodec::codecForName ("GBK"); QPushButton button (coder->toUnicode ("按我")); button.show (); return app.exec ();}

0 0
原创粉丝点击