Symbian Series60下如何显示汉字
来源:互联网 发布:oracle sql 去重复数据 编辑:程序博客网 时间:2024/06/05 10:07
Symbian Series60下如何显示汉字
1. SDK开发包中的模拟器显示汉字问题.
只有中文版本的SDK中的模拟器才能显示汉字(自带字库除外)。
如果是英文版本的模拟器,直接显示GB的汉字编码,除开显示的汉字为小方块外,程序还会出现异常错误。
英文版本的模拟器,比如SDK 1.2上显示汉字唯一的办法就是自带字库或者画图。这样的办法虽然比较复杂,但是在移植的时候方而轻松了。而且不用为不同机型字体大小变化而发愁。
中文版本的模拟器,比如SDK
2. 在真实手机上显示汉字。
虽然在makesis中的pkg文件中可以选择安装语言,比如英文EN,中文ZH,但是这个安装选项其实根本没有任何用处。Symbian采用的是Unicode编码,它只看你的Unicode编码,不看其它的。所以要解决汉字问题,必须转换我们的汉字编码。
转换的办法分为静态转换和动态转换:
静态转换:
在RSS资源文件里面定义
RESOURCE TBUF64 r_example_view_title { buf = "新年快乐";}
然后将其用WORD转换成UTF8编码,在此RSS文件头部添加CHARACTER_SET UTF8,否则无法编译,然后在程序里面调用,就能显示中文了。
在你的程序里面,首先得include系统根据rss文件生成的rsg头文件,里面包含了
#define R_EXAMPLE_VIEW_TITLE 0x24da2006
然后在程序中,使用下面这个函数来创建资源
HBufC* CCoeEnv::AllocReadResourceL(TInt aResourceId) const
这种办法显然不是很好,因为所有的文字资源都放在了RSS资源文件,如果我们的程序有自己的资源文件来存放文字就不好办了。
Windows98过后,Windows就提供了关于Unicode的转换的API函数可以调用。我们可以自己写个程序,转换针对文字的UTF8转换。下面就是这两个Windows API
MultiByteToWideChar
WideCharToMultiByte
下面是我自己写的一个转换函数。
typedef struct _Utf8
{
u16 len;
char string[MAX_CHAR]; // 不包括字符串长度
}Utf8;
//////////////////////////////////////////////////////////////////////////
// desc :把一个常规字符串转换成一个utf8编码的字符串
Utf8* utf8_convert(const char *string)
{
char utf8[10*MAX_CHAR];
WCHAR wstr[10*MAX_CHAR];
int wsz;
int utf8sz;
Utf8 *pUtf8;
wsz= MultiByteToWideChar(CP_ACP, 0, (const char*)string,(int)strlen(string)+1,wstr,sizeof(wstr)/sizeof(wstr[0]) );
utf8sz= WideCharToMultiByte(CP_UTF8, 0, wstr, -1,utf8, sizeof(utf8), NULL, NULL );
pUtf8 = (Utf8*)malloc(sizeof(Utf8));
strcpy(pUtf8->string,utf8);
pUtf8->len = (u16)(utf8sz-1);
return pUtf8;
}
动态转换:
Symbian 自从5.1后过,就提供了Unicode转换的API。下面是我整理的一个转换的函数,直接粘贴过去就可以用了。
注意,本段程序需要增加头文件charconv.h和库文件charconv.lib
HBufC16* CAppView::ConvertToUnicode(TText* text)
{
// CcnvCharacterSetConverter API来转换
CCnvCharacterSetConverter* converter=CCnvCharacterSetConverter::NewLC();
if(converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk, iCoeEnv->FsSession())!=CCnvCharacterSetConverter::EAvailable)
User::Leave(KErrNotSupported);
TText8 *str = (TText8*)text;
TInt state=CCnvCharacterSetConverter::KStateDefault;
TPtrC8 source( str );
HBufC16* iInfoText = HBufC16::NewL(source.Length()*2);
TPtr16 ptr = iInfoText->Des();
if(CCnvCharacterSetConverter::EErrorIllFormedInput == converter->ConvertToUnicode(ptr, source, state))
User::Leave(KErrArgument); //Leave if error in conversion.
CleanupStack::PopAndDestroy(); //clean for converter
//delete converter;
return iInfoText;
}
- Symbian Series60下如何显示汉字
- Symbian Series60
- symbian 汉字显示
- symbian 汉字显示
- symbian如何显示中文
- [术语]手机操作系统/Symbian/Series60/80
- symbian下如何截图
- 关于Nokia Symbian Series60 SDK中的两个BUG的解决
- Symbian Series60上实现混音的办法
- Symbian Series60上实现混音的办法
- symbian在Series60中创建自定义列表(LISTBOX)
- Symbian Series60上实现混音的办法
- Symbian中显示中文汉字(3种方法)
- PCB上 如何显示 汉字
- 西文环境下显示汉字
- DOS下显示汉字_点阵汉字显示[转]
- 如何Symbian平台上显示特殊字符
- 如何使Symbian C++程序全屏显示
- 目前最快的分页..十万数据也在10~20Ms
- 今天我流泪了,也是我进公司写的第500个程序。
- 数据库分页算法类 仿LeadBBS
- 《Enchantment》-- Charlotte Church 专辑收藏
- 心如止水
- Symbian Series60下如何显示汉字
- 最近好着急
- 层的显示与隐藏
- ARM中,Little endian & Big endian是何意思?
- 今天是4月24日了,我象一头烦躁的狮子
- ORACLE函数大全
- 什么都说不出来了.
- BitTorrent 协议规范(翻译)
- BI构架及相关技术简介(上)