注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

deisp的博客

 
 
 

日志

 
 

qte2读取中文文件的测试.txt  

2008-05-02 14:13:58|  分类: QT 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


读取中文文件内容的测试

有3种因素
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 = 乱码

2.1 是utf8文件  + QString::fromLocal8Bit  = 方块
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  = 终于出来汉字了

设置字体
  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::codecForLocale();
 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);

//QMessageBox::information(this,tr("notice"),QString::fromLocal8Bit("你好"));//file.readAll() QString::fromLocal8Bit
//pcodec->toUnicode("你好") 乱码
//QString::fromLocal8Bit("你好") 方块
//QString::fromUtf8("你好") 也是方块

//使用fromLocal8Bit
  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");
 

 

 LiuR(8174296) 19:59:03

1. 保存中文的文件需要是 unicode 格式.

2. 使用 QString 来保存读取出来的数据(因为QString内部使用的unicode机制,如果你使用 char 那么需要一次转换).

3. 由于很多字体并不支持 全部unicode编码(或者根本不支持unicode编码).那么 unicode 码的中文字还是不能显示的.所以你需要设置 QFont 的 family 是支持中文unicode码的字库.比如 : 宋体(注意:宋体在非windows系统下的具体名称).

   LiuR(8174296) 20:00:06

以上的方法对其他全角字也支持,比如韩文.

   LiuR(8174296) 20:04:17

@leenux:

1. windows下的文本编辑器以 unicode 码保存文件时,采用的是 utf16 的宽字符形式.(有时候可以在windows下编辑好需要的文本文件)

2. QString 的内部编码也是 utf16.

3. QString直接保存 utf16 编码的信息不需要使用QString::fromLocal8Bit 转换就可以成功显示.

 

由于以上因素,我建议文件保存成 utf16 的形式.

  评论这张
 
阅读(254)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017