字符串编码中文表示常用的有:gb2312,gbk,unicode,utf-8
其中gbk是gb2312的超集,也就是涵盖了gb2312编码的所有内容,
utf-8是unicode的在网络传输中的一种编码格式,
如果我们使用vc做为开发工具,在win下面进行开发,那么win
的默认字符集是 gbk的,而symbian系统默认的编码方式却是
unicode,也就是说直接写在程序里面的汉字在手机上显示的时候,
就会变成乱码。
通常解决这个问题的方法有两种:
(1)静态资源文件解决方案
(2)动态的调用字符集转换函数解决方案
对呀第一种解决方案来说,需要手工编辑rss文件,把汉字内容部分改为utf-8格式,
在rss文件的末尾或者开头添加:character_set utf8 即可
缺点是这种字符串一般针对静态资源,如果是那种随时根据数据变化更新汉字的情况
则需要考虑第二种情况
第二种情况动态转换字符集的方法
常使用ccnvcharactersetconverter和cnvutfconverter这两个类进行转化成symbian系统认识的unicode编码.
ccnvcharactersetconverter类可以进行symbian支持的所有编码转换
cnvutfconverter这个类常utf-8与unicode 和utf-7与unicode之间的相互转换
添加头文件
#include
在mmp里面添加
library charconv.lib // for gbk to unicode converter
这两步完成后,重新编译;下面的这两个函数就可以用了。
void cmcappui::convgbk2uni(tdesc8& original, tdes& res) {
#ifndef __wins__
rfs afileserversession;
afileserversession.connect();
ccnvcharactersetconverter* converter=ccnvcharactersetconverter::newlc();
if(converter->preparetoconverttoorfroml(kcharactersetidentifiergbk,afileserversession)!=ccnvcharactersetconverter::eavailable)
user::leave(kerrnotsupported);
tint state=ccnvcharactersetconverter::kstatedefault;
tptrc8 str( original );
hbufc* iinfotext = hbufc::newl( str.length() );
tptr16 ptr = iinfotext->des();
if(ccnvcharactersetconverter::eerrorillformedinput == converter->converttounicode(ptr, str, state))
user::leave(kerrargument);
res.zero() ;
res.copy(ptr) ;
afileserversession.close();
cleanupstack::popanddestroy();
delete iinfotext;
#else
res.format(_l("wayne len %d"), original.length()) ;
#endif
}
void cmcappui::convuni2gbk(tdesc& original, tdes8& res) {
#ifndef __wins__
tint state=ccnvcharactersetconverter::kstatedefault ;
ccnvcharactersetconverter* iconv ;
iconv = ccnvcharactersetconverter::newlc();
if(iconv->preparetoconverttoorfroml(kcharactersetidentifiergbk,
ieikonenv->fssession())!=ccnvcharactersetconverter::eavailable)
user::leave(kerrnotsupported);
iconv->convertfromunicode(res, original, state) ;
cleanupstack::popanddestroy() ;
#else
res.format(_l8("wayne chen %s"), original) ;
#endif
}
具体的使用方法:
tbuf8 title8 ;
tbuf title16 ;
tbuf8 msg8 ;
tbuf msg16 ;
title8.format(_l8("友情提示")) ;
convgbk2uni(title8, title16) ;
msg8.format(_l8(" 谢谢您的使用")) ;
convgbk2uni(msg8, msg16) ;
showinfodialog(title16, msg16) ;
即可,现在title16和msg16里面都存放的是16位的unicode中文字符串了,
可以直接显示了。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号