symbian中文字符串显示问题的解决

原创 2007年09月21日 14:18:00
 symbian中文字符串显示问题的解决
作者: 未知∣来源:∣原文地址∣2006-3-11
相信大家都在处理symbian中文显示的时候遇到了这种问题,
我现在就给总结一下这种问题的解决方法:
字符串编码中文表示常用的有: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 即可
缺点是这种字符串一般针对静态资源,如果是那种随时根据数据变化更新汉字的情况
则需要考虑第二种情况

第二种情况动态转换字符集的方法
添加头文件
#include // for char set convert GBK - Unicode
在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<20> title8 ;
TBuf<20> title16 ;
TBuf8<20> msg8 ;
TBuf<20> msg16 ;
title8.Format(_L8(”友情提示”)) ;
ConvGbk2Uni(title8, title16) ;
msg8.Format(_L8(” 谢谢您的使用”)) ;
ConvGbk2Uni(msg8, msg16) ;
ShowInfoDialog(title16, msg16) ;
即可,现在title16和msg16里面都存放的是16位的unicode中文字符串了,
可以直接显示了。

java中文乱码解决之道(五)-----java是如何编码解码的

在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码...
  • chenssy
  • chenssy
  • 2015年01月20日 09:29
  • 66665

处理中文乱码和中文部分乱码 .

在网络操作中,关于中文乱码很多初学者都感到非常困难,如何解决乱码?不要没有目的胡乱转码,笔者访问了几个初学者,他们对于这个问题常用的方法就是一个一个编码去试直到找到为止,但有些情况即使一个一个地去试也...
  • lhzjj
  • lhzjj
  • 2014年12月08日 13:52
  • 3029

彻底弄懂Qt的编码(汉字乱码问题及相关函数作用)

测试1新建test工程用于测试,main.c文件内容如下:#include #include int main(int argc, char *argv[]) { QCoreApplicat...
  • u012790503
  • u012790503
  • 2016年09月09日 11:05
  • 6110

VS2010编译运行的程序输出的中文乱码,无法显示中文

在vc6.0中默认的编码是Ascii编码,VS2010中默认的编码是Unicode编码,你可以设置你的VS2010编译器中的字符编码为Ascii...
  • yskshift
  • yskshift
  • 2014年08月12日 21:13
  • 2945

linux 中 ssh客户端显示中文乱码修改解决办法

切换root用户    Su root   方法一:修改配置文件   原因在于文件/etc/sysconfig/i18n 这个文件是系统的区域语言设置, i18n是...
  • u014470581
  • u014470581
  • 2016年08月18日 09:26
  • 8047

python2处理中文字符问题

在python2中,正常处理中文字符问题
  • jdbc
  • jdbc
  • 2017年05月20日 10:24
  • 1033

vs2013 c++ 编程CString字符串查找替换后变乱码的原因及解决方法

对于大可以文本方式打开的文件,vs2013下用CString自身的查找替换函数不会出问题,但有些文件较特殊,比如vs工程的资源文件*.rc和resource.h,这些文件也可用记事本打开,但它们不是普...
  • sxzly
  • sxzly
  • 2015年12月05日 09:43
  • 1023

plsql中文乱码解决策略

最近遇到pl/sql中文乱码的问题,在网上寻找解决办法的资料挺多的,内容差不多,只是零碎,这讲一点,那讲一点。最初我被这个问题困了很久,试了一些方法,后又问了几个牛人,还是无果。这么一折腾两天了。不过...
  • wangyajin333
  • wangyajin333
  • 2014年11月27日 16:12
  • 2352

Qt 5 中解决中文乱码的方法

Qt 5 中解决中文乱码的方法在 Qt 4 的时代,解决中文乱码挺麻烦。要考虑用的是什么编译器,具体的可以参考下面这篇文章: http://blog.csdn.net/brave_heart_lxl...
  • liyuanbhu
  • liyuanbhu
  • 2017年05月21日 11:47
  • 3855

Matplotlib输出中文显示问题

作者:吴文敏 地址:http://my.oschina.net/u/1180306/blog/279818 摘要 Matplotlib是一个很好的作图软件,对于学习python的人更是如此,...
  • whiup
  • whiup
  • 2016年07月28日 12:43
  • 1268
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:symbian中文字符串显示问题的解决
举报原因:
原因补充:

(最多只允许输入30个字)