`

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

阅读更多

 

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

相信大家都在处理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 <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系统对中文字符串的支持涉及编码、存储、显示和操作等多个方面。理解并熟练掌握这些知识点,对于在Symbian平台上开发具有本地化功能的应用程序至关重要。同时,持续学习和实践是提升技能的关键,...

    从另外一个角度看symbian字符串

    ### 从另一个角度理解 Symbian 字符串 #### 引言 对于初学者来说,掌握 Symbian 平台下的字符串使用并非易事。相较于传统的 C++ 编程环境,Symbian 在字符串处理方面引入了一系列独特的概念和技术,旨在满足移动...

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

    在"简单的应用"部分,可能会涵盖如何在Symbian应用程序中使用这些字符串处理技术来实现实际功能,例如用户界面的文本显示、文件读写、网络通信中的数据编码解码等。这可能涉及到Symbian的系统服务API,如User ...

    Symbian C++手机编程中字符串处理

    在Symbian C++手机编程中,字符串处理与标准C/C++有所不同,主要是因为Symbian OS使用了一种称为描述符(Descriptors)的机制来安全高效地管理字符串和二进制数据。描述符是一种内建的数据结构,它可以是常量或可变...

    symbian 中导入中文字符

    在Symbian系统中正确导入和显示中文字符涉及到多个方面的工作,包括设置正确的字符集、合理定义字符串资源以及正确加载和释放资源等。只有综合考虑这些因素,才能确保应用程序能够在不同语言环境下正常运行,提供...

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

    ### Symbian中显示中文汉字(3种方法) 在Symbian操作系统中处理中文显示是一项基本但又重要的功能。本文将详细介绍三种不同的方法来实现这一功能,并解释每种方法的具体步骤和技术要点。 #### 方法一:使用UTF-8...

    Symbian多语言显示源代码

    在Symbian操作系统中,尤其是S60 3rd Edition平台,处理多语言显示是开发者必须面对的一个关键问题。这个“Symbian多语言显示源代码”示例着重于展示如何在S60设备上有效地支持中英文显示,这对于创建国际化应用至关...

    在Visual C++调试器中显示Symbian字符串和描述

    为了解决这个问题,可以通过Visual Studio中的AutoExpand功能来定制显示规则。 AutoExpand功能允许用户定制调试器的显示规则,以便能够正确地显示自定义数据类型的成员。开发者需要手动修改AutoExp.dat文件,这个...

    解决s60 5tr模拟器V0.9 不显示中文 问题

    在这个目录下,你可能能找到与系统配置、字体和编码相关的文件,通过对这些文件进行调整,可以尝试解决中文显示问题。 综上所述,解决s60 5tr模拟器V0.9不显示中文的问题需要深入理解编码、字体、系统配置和应用...

    使用Symbain OS字符串描述符

    在Symbian OS中,字符串处理是一个至关重要的部分,因为操作系统和应用程序的许多功能都涉及到字符串操作。Symbian OS采用了一种独特的机制——描述符(Descriptors)来处理字符串,这种机制与传统的C++字符串(如...

    symbian 九宫格图片DEMO(下面显示汉字)

    4. **字符串处理**:由于DEMO要求下方显示汉字,所以需要处理Unicode编码,确保中文字符能正确显示。Symbian系统支持Unicode,但开发者仍需注意字符编码和解码的过程。 5. **资源管理**:考虑到移动设备的内存限制...

    Symbian OS课件(5)

    《Symbian OS课件(5)》主要涵盖了Symbian OS系统中关于基本类、字符串和动态数组的深入理解。这些是Symbian OS编程基础的重要组成部分,对于理解和开发在该平台上运行的应用程序至关重要。 Symbian OS是一个高度...

    SymbianOS中的描述符.doc

    在Symbian操作系统中,描述符(Descriptors)是用于高效管理字符串的重要机制。字符串在Symbian中被称为Descriptor,它们可以存在于RAM或ROM中,因此系统提供了多种类型的字符串类以适应不同的需求和内存管理策略。 ...

    symbian 描述符 类型转换

    在Symbian操作系统中,类型转换是至关重要的,因为该系统使用了一套特定的字符串处理类,如TDesC、TDes、TPtr、TPtrC、TBuf和TBufC。这些类是为了优化内存使用和性能而设计的,但这也意味着在不同类型的字符串之间...

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

    为了解决这个问题,Symbian引入了Unicode支持,主要采用UCS-2编码,这是一种16位的Unicode变体,能够表示大部分常用字符。 在Symbian OS上进行UNICODE转换,开发者通常需要用到`TDesC8`和`TDesC16`这两个字符串类型...

    Symbian 开发输入法字库

    这里定义了一个名为 `A` 的常量指针,指向了一个包含了“啊”、“阿”、“呵”等汉字的字符串。 #### 拼音分类 每个拼音开头的汉字列表都被单独定义,便于管理和访问。例如: ```cpp const TUint8* BAI = _L8("百...

    symbian中动态加载汉字

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

    课题-QML基础-QML国际化(中文示例).pdf

    本篇主要介绍如何在QML中实现国际化,以中文为例,帮助开发者了解如何让QML代码中的字符串显示为中文。 首先,在Qt项目的`pro`文件中进行必要的配置。`CONFIG += localize_deployment`允许添加应用程序的本地化信息...

Global site tag (gtag.js) - Google Analytics