char qt 转unicode_Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 乱码与转码问题...

2012-03-22 14:00175人阅读评论(0)代码如下:如果不不设全局的字符集是utf-8,那么网上一般的方法是可以转的。如下程序中 #define DD 1的情况下;但是如果设置了全局的utf-8,再用以前的方法:QByteArrayba=aaa.toLatin1();constchar*c_str=ba.data();PS:c_str所指向的内存单元,如果你想长时间使用你应该复制出来,...
摘要由CSDN通过智能技术生成

2012-03-22 14:00

175人阅读

评论(0)

代码如下:如果不不设全局的字符集是utf-8,那么网上一般的方法是可以转的。如下程序中 #define DD 1的情况下;但是如果设置了全局的utf-8,再用以前的方法:

QByteArrayba=aaa.toLatin1();

constchar*c_str=ba.data();

PS:c_str所指向的内存单元,如果你想长时间使用你应该复制出来,要不可能过数行代码后,你再读你的数据,c_str所指向的内存单元就不是你以前读的内容了。函数返回的指针临时变量,不能长时间使用!!!!!!!

具体代理在本贴最后补充出来:

等网上类似的方法,都会出现转代汉字不成功,但能转代ASICC码的情况。汉字都成了问号的ASICC码63。这是因为没有用对方法没有用转换utf-8码的方法。

转码是件很复杂的事。

#include

#include

#include

#include

#include

#defineDD0

intmain(intargc,char*argv[])

{

QApplicationapp(argc,argv);

#ifDD

//没有设置全局的是utf-8字符

#else

QTextCodec*codec=QTextCodec::codecForName("UTF-8");

QTextCodec::setCodecForLocale(codec);

QTextCodec::setCodecForCStrings(codec);

QTextCodec::setCodecForTr(codec);

QFontfont;

font.setFamily(("WenQuanYiZenHei"));

font.setPointSize(12);

app.setFont(font);

app.setFont(font);

#endif

QStringaaa="你好a1234";

QStringbbb="哈哈afaf394的AAA";

#ifDD

QByteArrayba=aaa.toLatin1();

constchar*c_str=ba.data();

printf("c_str:%s:size=%d\n",c_str,strlen(c_str));

char*p;

p=(char*)c_str;

printf("p=%d\n",*p);

p++;

printf("p=%d\n",*p);

QStringddd(c_str);

qDebug()<

#else

char*ad=aaa.toUtf8().data();

char*bb=bbb.toUtf8().data();

printf("ad=%s,size=%d\n",ad,strlen(ad));

printf("df=%s,size=%d\n",bb,strlen(bb));

#endif

QPushButtonccc("AWQWQwq你了");

ccc.show();

returnapp.exec();

}

以下是在网上找的,感觉很好,可以一块理解:

这个好像就是用几种不同的字符,但不会出错,不像我们一种都搞不定

Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK

#include

#include

#include

#include

void MainWindow::on_pushButton_clicked()

{

/*

只有8位编码的才需要tr, unicode不要tr

gb2312是GBK的子集,通常设成哪个都一样的

所谓的QString转char*,结果并不相同,根据编码格式不同而不同

QString转unicode,不用转,QString本身就是unicode

QString的根本是QChar数组,但不是以0结尾,有大小,QChar的根本是ushot

Qt中unicode声明:可以用wchar_t,也可以用ushot,没有WCHAR

QByteArray可以理解为char类型的动态数组,有大小,不是以\0结尾

*/

/*

ui创建1个列表框QListWidget,和1个按钮即可

用windows记事本分别创建4种文件,本例可直接打开

ANSI:没有文件头,2字节/汉字,1字节/英文

UTF-8:文件头[0xEF,0xBB,0xBF],3字节/汉字,1字节/英文

Unicode:文件头[0xFF,0xFE],2字节/汉字,2字节/英文

Unicode big endian :文件头[0xFE,0xFF],同Unicode,字节序相反

QString转char*的规则同上;

*/

/*

QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

QTextCodec::setCodecForTr(QTextCodec::codecForName("gb2312"));

QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

如下使用想要得到正确结果必须使用类似以上的语句

str = tr("显示中文");

但以下这个可以直接使用

strText = QString::fromLocal8Bit("显示中文");

*/

ui->list->addItem(QString::fromLocal8Bit("--------显示中文----------"));

QString strFileName = QFileDialog::getOpenFileName(this, tr("OpenFile"), ".", tr("Image Files(*.*)"));

if(strFileName.length() == 0)

{

ui->list->addItem(tr("You didn't select any files."));

return;

}

// 打开文件

QFile *pFile = new QFile(strFileName);

if (!pFile->open(QFile::ReadOnly))

{

ui->list->addItem(tr("open file fai

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值