字符串编码中文表示常用的有: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中文字符串了,
可以直接显示了。
Symbian 关于字符编码转换
来源:这里教程网
时间:2026-02-21 13:06:29
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- .Net Core 下使用ZKWeb.System.Drawing实现验证码功能
- Flex与.NET互操作(二):基于WebService的数据访问(上)
Flex与.NET互操作(二):基于WebService的数据访问(上)
26-02-21 - .NET异步编程总结----四种实现模式代码总结
.NET异步编程总结----四种实现模式代码总结
26-02-21 - .NET原型模式讲解
.NET原型模式讲解
26-02-21 - .NET工厂方法模式讲解
.NET工厂方法模式讲解
26-02-21 - 继承的总结
继承的总结
26-02-21 - ASP.NET微信公众号之用户分组管理web页面
ASP.NET微信公众号之用户分组管理web页面
26-02-21 - .NET桥接模式讲解
.NET桥接模式讲解
26-02-21 - .NET适配器模式讲解
.NET适配器模式讲解
26-02-21 - .NET装饰模式讲解
.NET装饰模式讲解
26-02-21
