symbian 模拟器乱码

转载 2012年03月22日 16:33:24
字符串编码中文表示常用的有: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中文字符串了,可以直接显示了

关于HttpClient模拟浏览器请求的参数乱码问题解决方案

利用HttpClient模拟浏览器行为获取网页内容时,当参数中有中文,在服务器端解析出的参数值中的中文都是“?”,这里就给你完美的解决方案...
  • xiaojimanman
  • xiaojimanman
  • 2015年03月18日 11:04
  • 4435

file_get_contents模拟浏览器访问的时候乱码

乱码有几种可能如下:1.页面能获取过来,内容乱码:可以采用iconv()和mb_convert_encoding()函数进行转码"code" class="php">header("content-t...
  • lxcboke
  • lxcboke
  • 2016年05月18日 14:47
  • 1165

Java HttpURLConnection模拟请求Rest接口解决中文乱码问题

说明在java使用HttpURLConnection请求rest接口的时候出现了POST请求出现中文乱码的问题,经过把传入的String通过多种方法进行编码发现都解决不了,如下: String te...
  • hwj3747
  • hwj3747
  • 2016年12月14日 10:41
  • 5927

Symbian Anna 升级后导致 Ovi 商店乱码的解决方案

  • 2012年01月24日 14:40
  • 3KB
  • 下载

黑莓模拟器中文乱码解决

  • 2010年08月09日 15:58
  • 967B
  • 下载

Symbian系统S60平台三版模拟器安装[SDK教程]

http://www.cnmsdn.com/html/201008/1282268588ID7339.html Symbian操作系统S60平台三版模拟器顺应S60平台三版手机的上市而发布,并迅速完善...
  • zhengzhijin12345
  • zhengzhijin12345
  • 2011年02月23日 17:12
  • 482

Cocos2d—X游戏开发之VS2010 控制台输出中文,模拟器中文乱码问题解决(十八)下篇

#include 继续上篇的问题。 在解决了中文显示乱码的问题之后,仍然有很多的问题需要我们解决。 现在放在我们面前的问题有2个。第一个是虽然可以显示中文,但是是wstring的类型,肯定不是我们...
  • wisdom605768292
  • wisdom605768292
  • 2013年09月20日 14:34
  • 3106

Cocos2d—X游戏开发之VS2010 控制台输出中文,模拟器中文乱码问题解决(十八)上篇

首先,先解决第一个问题,我们使用VS2010开发的时候,调试的时候,中文打印出来都是乱码,这个问题很纠结。 如下图: CCLOG("cclog: 测试使用标签的自动换行和个别字体大写");LOGNEW...
  • wisdom605768292
  • wisdom605768292
  • 2013年09月13日 16:18
  • 3680

Gnome Terminal,Xshell等终端模拟器中执行命令出现乱码问题解决

一、前言Xshell跟Gnome Terminal相比,两者都是终端模拟器(在Xshell中也可以执行简单的内置命令,如“cd”,“ls”等),地位相同。二、原理分析涉及到乱码,那么需要了解编码解码过...
  • DSLZTX
  • DSLZTX
  • 2016年06月07日 20:11
  • 2464

symbian模拟器试用到期替换文件

  • 2013年03月06日 14:14
  • 56KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:symbian 模拟器乱码
举报原因:
原因补充:

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