字符串编码中文表示常用的有: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 即可:
具体步骤如下:
首先确定你是模拟器是中文,如果不是的话在开始菜单里面有设置Language的,换成中文就可以了;
然后你在用carbide或者是vs新建工程的时候选择中文,语言代号为31;
要在程序中显示中文,参考下面的代码:
TBuf <32> nameText;
CEikonEnv::Static()->ReadResource(nameText, R_NAME_TEXT);
gc.UseFont(iCoeEnv->NormalFont());
TPoint namePoint(aRect.Width()/5*3, aRect.Height()/4);
gc.DrawText(nameText,namePoint);

.rss中
#include "project.loc"
RESOURCE TBUF32 R_NAME_TEXT { buf=qtn_wp_name_text; }

.loc中
CHARACTER_SET UTF8
#define qtn_wp_name_text "中文"

很简单的一个处理就可以。
切忌在打开资源定义文件的时候改变编码,那样你会后患无穷的。

如果你一开始在建工程的时候就不是选择的中文的话,那么按下面的方法解决:
打开你的mmp文件,在里面最后加上一行LANG 31,如果以前有LANG SC就注释掉;
然后在你的资源定义文件开头加上CHARACTER_SET UTF8;
然后用文本文件方式打开,另存为,选择UTF-8字符编码的;
最后用编辑器打开,确定里面开头的部分没有乱码,要是开头的时候有就删除。

用第一种方法的缺点是这种字符串一般针对静态资源,如果是那种随时根据数据变化更新汉字的情况则需要考虑第二种情况

第二种情况动态转换字符集的方法
常使用CCnvCharacterSetConverter和CnvUtfConverter这两个类进行转化成Symbian系统认识的Unicode编码.
CCnvCharacterSetConverter类可以进行Symbian支持的所有编码转换
CnvUtfConverter这个类常UTF-8与Unicode 和UTF-7与Unicode之间的相互转换

添加头文件
#include // for char set convert GBK - Unicode
在mmp里面添加
LIBRARY charconv.lib // for GBK to Unicode converter

这两步完成后,重新编译;下面的这两个函数就可以用了。
void CUTFConverterContainer::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 CUTFConverterContainer::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("云云^")) ;

即可,现在title16和msg16里面都存放的是16位的unicode中文字符串了,可以直接显示了

symbian 模拟器乱码相关推荐

  1. 关于Symbian 模拟器一闪就没的解决办法(Eclipse+MTJ+symbian模拟器)

    这几天被分到了一个symbian系统上的java应用的开发,在搭建环境过程中遇到了很多的问题,现总结如下: 1."Jar file could not be initialized" ...

  2. Symbian模拟器启动流程

    1)启动epoc.exe 加载euser.dll 加载emulator.dll 阶段1: 如果手机采用的是NAND Flash, 那么NAND核心载入器会载入并启动Bootstrap程序.如果是NOR ...

  3. 删除Symbian模拟器中测试程序的方法

    删除Symbian模拟器(功能表->安装)里面测试程序的方法: For S60 2nd平台: 删除/epoc32/release/wins/udeb/z/system/apps/myapp的目录 ...

  4. 删除Symbian模拟器(功能表-安装)里面测试程序的方法

    转自:http://www.devdiv.net/action-blogdetail-uid-11451-id-284 删除Symbian模拟器(功能表->安装)里面测试程序的方法: For S ...

  5. symbian 模拟器 相关

    (1)模拟器 里面测试的程序如何删除? for s60 2nd平台: 删除/epoc32/release/wins/udeb/z/system/apps/myapp的目录即可 for s60 3rd平 ...

  6. symbian模拟器的修正

    装好了symbian的开发环境,却发现模拟器却存在问题.虽然不影响整体开发,但是觉得闹心.现将总结如下: 1.Application closed: ncnlist KERN-EXEC 3 错误. 解 ...

  7. Symbian模拟器“Cannot start ECMT Manager”错误提示解决方案

    Symbian的epoc模拟器默认情况下只分配32M的内存,因此启动模拟器会很慢,这个值是可以设置的.,打开Tools > Preferences在General标签页下可以进行调节.但是出现了 ...

  8. 【转】配置Symbian模拟器支持模拟MMC存储卡

    原文:http://hi.baidu.com/beibei245/blog/item/7d0329c4827c01a18226ac39.html 我按照网上二版配置的方法,试了半天还是不行,最后只好啃 ...

  9. 优化Symbian模拟器(转)

    关闭你的病毒监控软件(它们会逐一扫描你使用的文件) 2. 阻止模拟器将调试信息写到你的硬盘上.如果你看看你的TEMP目录,你将会看到一个叫做EPOCWIND.OUT的文件.随着时间的进展,这个文件将不 ...

最新文章

  1. Java中山脉的绘制---递归方法
  2. java的uuid有什么用_java – 什么是有效的UUID?
  3. 【华为云实战开发】13.如何在云端快速搭建python网站
  4. Spring Data JPA整合Redis缓存的配置
  5. 推荐一些好用的Chrome插件
  6. matlab图像身高测量,基于Kinect景深图像的快速身高和体重测量方法
  7. 打开图片时提示windows照片查看器无法显示图片内存不足该如何解决
  8. 【实战】1213- 点赞动画还可以做得那么飘逸!
  9. 智能双向嵌入式UART转CAN模块介绍
  10. springmvc重定向到另一个项目_Spring MVC重定向和转发详解
  11. 64位驱动 hp630打印机_HP Deskjet 1280打印机x64驱动下载|HP1280打印机windows7 x64位驱动 - 驱动无忧...
  12. 最大实体原则_在原则实体中使用特征
  13. WinPE下安装ISO格式Win系统
  14. 合并bn层到conv或FC层原理介绍及代码实现
  15. 分岔理论matlab程序,分岔理论(Ⅰ).PDF
  16. 还请大伙帮我看看哪里出了问题
  17. 《通信技术导论(原书第5版)》——1.5 通过多路复用增加网络容量
  18. android source code online
  19. Android屏幕亮度适配
  20. 全国计算计算机应用能力考试合格证,全国计算机应用能力考试证书有效期

热门文章

  1. openfire好友关系解析
  2. 微信删除好友后对方还有自己吗?教你找回被删除的那个TA
  3. 三种EXCEL去重统计方法
  4. SAS|where keep rename
  5. Virtualbox虚拟机运行加速
  6. Java语言点名器(简单版)
  7. Android 11.0 设置默认8时区和默认24小时制
  8. 什么是 Python 语言
  9. ANSYS Mechanical联合ANSYS nCode DesignLife 在疲劳中的应用
  10. css3参考文档,css/css3 中文参考文档手册最新版