qt读取中文文件的测试
来源:互联网 发布:上海交通大学网络管理 编辑:程序博客网 时间:2024/05/22 11:55
转载自:http://blog.chinaunix.net/uid-8743735-id-2454902.html
读取中文文件内容的测试
有3种因素
1文件的编码格式(是utf8格式和非utf8格式)
2程序里面转换得到内容的方式(QString::fromLocal8Bit 和 codec->toUnicode)
注明一下 这里 QTextCodec* pcodec = QTextCodec::codecForLocale();
3不同的字体,假设知道有种字体可以正确显示中文这里举例是Sans Serif字体和 不设置字体
1文件的编码格式(是utf8格式和非utf8格式)
2程序里面转换得到内容的方式(QString::fromLocal8Bit 和 codec->toUnicode)
注明一下 这里 QTextCodec* pcodec = QTextCodec::codecForLocale();
3不同的字体,假设知道有种字体可以正确显示中文这里举例是Sans Serif字体和 不设置字体
因为我最先考虑的不是字体 所以顺序如下
1.1 不是utf8文件 + QString::fromLocal8Bit = 方块
1.2 不是utf8文件 + codec->toUnicode = 乱码
1.2 不是utf8文件 + codec->toUnicode = 乱码
2.1 是utf8文件 + QString::fromLocal8Bit = 方块
2.2 是utf8文件 + codec->toUnicode = 乱码
2.2 是utf8文件 + codec->toUnicode = 乱码
上面都没有考虑字体 这时候 热心的网友提醒我注意字体 我就分设置字体和不设置字体
3.1 设置字体 + 不是utf8文件 + QString::fromLocal8Bit = 乱码
3.2 设置字体 + 不是utf8文件 + codec->toUnicode = 乱码
3.3 设置字体 + 是utf8文件 + codec->toUnicode = 乱码
3.4 设置字体 + 是utf8文件 + QString::fromLocal8Bit = 终于出来汉字了
3.2 设置字体 + 不是utf8文件 + codec->toUnicode = 乱码
3.3 设置字体 + 是utf8文件 + codec->toUnicode = 乱码
3.4 设置字体 + 是utf8文件 + QString::fromLocal8Bit = 终于出来汉字了
设置字体
QFont font;
font.setPointSize(16);
font.setFamily(("Sans Serif"));
sceneryInfo->txtLabel->setFont(font);
是utf8文件,这个要自己用编辑器转
sceneryInfo->txtLabel->setText(QString::fromLocal8Bit(file.readAll()));
汉字出来了。。。。
QFont font;
font.setPointSize(16);
font.setFamily(("Sans Serif"));
sceneryInfo->txtLabel->setFont(font);
是utf8文件,这个要自己用编辑器转
sceneryInfo->txtLabel->setText(QString::fromLocal8Bit(file.readAll()));
汉字出来了。。。。
不知道我表达清楚了没有呢
QFont font;
font.setPointSize(16);
font.setFamily(("Sans Serif"));
sceneryInfo->txtLabel->setFont(font);
一定要记得setPointSize一下哦
QFile file(strTxt);
//QTextCodec* pcodec = QTextCodec::codecForName("GBK");
//QTextCodec* pcodec = QTextCodec::codecForName("gb18030");
//QTextCodec* pcodec = QTextCodec::codecForName("GB2312");
//QTextCodec* pcodec = QTextCodec::codecForName("utf8");
//QTextCodec* pcodec = QTextCodec::codecForName("ISO 8859-1");
//QTextCodec* pcodec = QTextCodec::codecForName("gb18030");
//QTextCodec* pcodec = QTextCodec::codecForName("GB2312");
//QTextCodec* pcodec = QTextCodec::codecForName("utf8");
//QTextCodec* pcodec = QTextCodec::codecForName("ISO 8859-1");
QTextCodec* pcodec = QTextCodec::codecForLocale();
if(NULL==pcodec)
{
QMessageBox::information(this,tr("notice"),tr("the textcode is error"));
return;
}
else
if(NULL==pcodec)
{
QMessageBox::information(this,tr("notice"),tr("the textcode is error"));
return;
}
else
//QTextCodec* pcodec = QTextCodec::codecForLocale();
if (file.open(IO_ReadOnly))//QFile::ReadOnly | QFile::Text
{
//QTextStream txtmp(&file);
//设置字体
QFont font;
font.setPointSize(16);
font.setFamily(("Sans Serif"));
sceneryInfo->txtLabel->setFont(font);
if (file.open(IO_ReadOnly))//QFile::ReadOnly | QFile::Text
{
//QTextStream txtmp(&file);
//设置字体
QFont font;
font.setPointSize(16);
font.setFamily(("Sans Serif"));
sceneryInfo->txtLabel->setFont(font);
//QMessageBox::information(this,tr("notice"),QString::fromLocal8Bit("你好"));//file.readAll() QString::fromLocal8Bit
//pcodec->toUnicode("你好") 乱码
//QString::fromLocal8Bit("你好") 方块
//QString::fromUtf8("你好") 也是方块
//pcodec->toUnicode("你好") 乱码
//QString::fromLocal8Bit("你好") 方块
//QString::fromUtf8("你好") 也是方块
//使用fromLocal8Bit
sceneryInfo->txtLabel->setText(QString::fromLocal8Bit(file.readAll()));
sceneryInfo->txtLabel->setText(QString::fromLocal8Bit(file.readAll()));
//sceneryInfo->txtLabel->setText(QString::fromUtf8(file.readAll()));
//sceneryInfo->txtLabel->setText(pcodec->toUnicode(file.readAll()));
}
else
printf("leedebug open error\n");
//sceneryInfo->txtLabel->setText(pcodec->toUnicode(file.readAll()));
}
else
printf("leedebug open error\n");
1. 保存中文的文件需要是 unicode 格式.
2. 使用 QString 来保存读取出来的数据(因为QString内部使用的unicode机制,如果你使用 char 那么需要一次转换).
3. 由于很多字体并不支持 全部unicode编码(或者根本不支持unicode编码).那么 unicode 码的中文字还是不能显示的.所以你需要设置 QFont 的 family 是支持中文unicode码的字库.比如 : 宋体(注意:宋体在非windows系统下的具体名称).
以上的方法对其他全角字也支持,比如韩文.
1. windows下的文本编辑器以 unicode 码保存文件时,采用的是 utf16 的宽字符形式.(有时候可以在windows下编辑好需要的文本文件)
2. QString 的内部编码也是 utf16.
3. QString直接保存 utf16 编码的信息不需要使用QString::fromLocal8Bit 转换就可以成功显示.
由于以上因素,我建议文件保存成 utf16 的形式.
0 0
- qt读取中文文件内容的测试
- qt读取中文文件的测试
- QT读取中文文件
- QT读取中文文件
- Qt读取中文文件
- QT读取中文文件
- QT读取中文文件
- Qt中文|qt5解决读取中文文件中文的乱码
- 读取中文文件内容的测试
- 读取中文文件内容的测试
- qte2读取中文文件的测试.txt
- QT读取中文文件(转)
- qt读取中文txt文件
- Qt读取中文路径文件
- QT读取TXT文件显示中文
- QT读取TXT文件显示中文
- QT QSettings读取文件中文乱码
- Qt读取文件中文编码问题
- 判断一个数是否为周期数,循环体是什么
- QT的翻译问题
- 航线设置
- android-butterknife 简单实用
- Android程序开发所用app图标的几种大小
- qt读取中文文件的测试
- linux下socket编程实例
- android 一键添加QQ群 的实现步骤
- 解决Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'问题
- 【c语言】有两个瓶子a和b,分别盛放醋和酱油,要求将它们互换
- 数据库第四次作业
- javaScript小技巧——添加表格内容
- Shell 参数的读取和处理
- 天翼电子商务:选择DevSuite,推进企业项目研发过程管理