`
luckliu521
  • 浏览: 258752 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Symbian 关于字符编码转换

阅读更多
转自:http://blog.csdn.net/kaiming2008/archive/2008/12/04/3441559.aspx

字符串编码中文表示常用的有: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 <charconv.h>        //  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中文字符串了,
可以直接显示了。
分享到:
评论

相关推荐

    symbian 中文字符串

    Symbian系统内部使用UTF-16编码存储和处理字符串,这是Unicode的一种变体,每个字符用两个字节表示。因此,当从其他编码(如GBK)转换到UTF-16时,需要进行适当的转换操作。 4. **字符串复制与比较**: 使用`Copy...

    Symbian OS上的文件操作和UNICODE转换

    UNICODE是一种通用的字符编码标准,能够表示世界上几乎所有的文字。Symbian OS早期版本支持的是Latin1(ISO-8859-1)编码,这无法涵盖中文、日文等非拉丁字符。为了解决这个问题,Symbian引入了Unicode支持,主要...

    symbian中的字符串处理及简单的应用.zip

    C#语言虽然不在Symbian平台的原生支持范围内,但若要在Symbian应用中处理字符串,开发者可能需要将C#的字符串转换为Symbian的字符串类型。这通常涉及到使用.NET Compact Framework或者使用互操作性接口(比如P/...

    Symbian中显示中文汉字(3种方法).

    #### 方法一:使用UTF-8编码转换 在Symbian系统中,文本数据通常采用UTF-8编码存储。为了正确地显示中文字符,我们需要通过Symbian提供的`CCnvCharacterSetConverter`类来完成字符集之间的转换。该类提供了多种字符...

    symbian中动态加载汉字

    在Symbian中,汉字的处理通常涉及到编码转换、字符集识别等多个方面。接下来,我们将详细探讨如何在Symbian中动态加载汉字。 ### 动态加载汉字的技术背景 在Symbian中处理汉字主要依赖于两个库:`utf.h` 和 `...

    QT symbian 自己写的

    在描述中提到的问题——中文显示为乱码,可能是由于字符编码不匹配导致的。在Qt中,你需要确保数据库、应用程序和文件系统的编码设置一致,通常应使用UTF-8编码。可以检查以下几点: 1. 数据库文件的编码:确认...

    SymbianOS中的描述符.txt

    SymbianOS中的描述符默认支持Unicode编码,这意味着所有描述符都以宽字符形式存储数据。这对于处理多语言环境下的文本非常有帮助。 #### 六、特殊字符处理 在SymbianOS中处理文本时,需要注意某些特殊字符的编码...

    Symbian多语言显示源代码

    Symbian中的TDesC类是用于存储和操作文本的基本数据类型,它可以处理不同编码的字符串。开发者需要了解如何使用TDesC类进行字符串的拼接、比较和格式化,以便在中英文之间切换。 3. **Text Formatting和Layout**:...

    Symbian 开发输入法字库

    这个宏可能用于将字符串转换为特定的编码格式,以便于在 Symbian 平台上存储和处理。例如: ```cpp const TUint8* A = _L8("啊阿呵吖嗄腌锕").Ptr(); ``` 这里定义了一个名为 `A` 的常量指针,指向了一个包含了...

    Symbain 汉字转拼音 查表实现

    首先,我们要理解的是,汉字转拼音涉及到字符编码问题。在描述中提到的"GBK"是一种在中国广泛使用的双字节字符集,它包含了大量汉字以及一些其他语言的字符。在Symbian系统上处理汉字时,通常会涉及GBK编码,因为它...

    Symbian版josn解析库

    对于Symbian平台的开发者来说,有了这样一个高效的JSON库,他们可以更便捷地处理来自服务器的JSON响应,或者将本地数据编码成JSON格式发送出去。 压缩包中的"josn开源库"可能包含了源码、编译好的库文件、示例程序...

    symbian编程实例代码Gzip

    Symbian提供了`CEikonEnv`和`TDesC8`等工具来处理字节流和字符串之间的转换。 以下是一些关键步骤的简要说明: 1. **创建Gzip文件对象**:使用`CGzipFile`的构造函数创建一个对象,并指定输入或输出文件的路径。 ...

    Symbian基础知识

    `Num()`将数值转换为字符串,`Format()`实现类似`sprintf`的功能。 对于堆描述符,有几点需要注意: - 使用`Des()`获取可修改的指针描述符。 - `HBufC::NewL()`与`TDesC`的`AllocLC()`都能分配内存创建堆描述符。 -...

    Symbian OS基础知识

    ### Symbian OS基础知识 #### 1. 引言 Symbian OS 是一款专为移动设备设计的操作系统,尤其在智能手机领域曾占有重要地位。...未来章节将继续深入探讨更多关于 Symbian OS 的高级特性和技术细节。

    2013年重庆专升本《计算机知识和应用》答案与分析汇编.pdf

    这篇文档是关于2013年重庆专升本考试《计算机知识和应用》的试卷答案与考点分析。这份资料包含了多项选择题的解答和相关考点解析,旨在帮助考生复习和理解计算机基础知识。 1. 文件命名规则:Windows XP操作系统中...

    2022年重庆专升本计算机原题分析.doc

    8. **Unicode编码**:Unicode编码可以表达0以上的字符数量,包括简体和繁体中文在内的大量字符。 9. **搜索文档**:在Windows中搜索包含特定词汇的Word文档,可以在“所有或部分文件名”框内输入"计划*.*",星号(*)...

    Symbian sdk帮助术语表

    - **定义**:Alaw 是一种音频编码标准,用于将 12 位线性音频数据转换为 8 位。 - **应用场景**:广泛应用于电话系统和其他通信网络中。 ### Aleppo - **关联条目**:帮助编写(Help Authoring)。 - **说明**:...

    tengge py for s60编程教程

    5.9对象与字符串的转换 6.0逻辑运算符 6.1定时程序的设计 6.2文本的查找替换和分割 6.3打包三版py软件的方法 6.4附加目录的创建技巧 6.5加密脚本的打包方法 6.6打包多脚本软件的方法 6.7对字典操作的函数 6.8多脚本...

    2012江苏省计算机偏软真题

    6. ASCII码:ASCII码是字符编码标准,字符"A"的ASCII码为41H,"d"比"A"低3个字母,所以其ASCII码为41H + 3 = 44H。 7. 逻辑操作指令:在汇编语言中,TEST指令用于进行逻辑测试,它可以判别符号位但不会改变原字节...

Global site tag (gtag.js) - Google Analytics