总结 symbian 显示中文
2010-05-31 19:47:00 来源:WEB开发网最近做项目,遇到一个 Symbian 中显示中文的问题,由于是刚开始接触 Symbian,遇到了很多困难,对于这个很基本的问题,借鉴了网上的一些方法最终还是解决了,现总结如下。
中文字符编码常用的表示法有:GB2312,GBK,Unicode,UTF-8,其中GBK是GB2312的超集,也就是涵盖了GB2312编码的所有内容,UTF-8是 Unicode的在网络传输中的一种编码格式,如果我们使用vc做为开发工具,在win下面进行开发,那么win的默认字符集是 GBK的,而symbian系统默认的编码方式却是Unicode,也就是说直接写在程序里面的汉字在手机上显示的时候,就会变成乱码。
void CECommerceRestaurantContainer::ConvGbk2Uni(TDesC8& original, TDes& res)
{
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;
}
现在title16和msg16里面都存放的是16位的unicode中文字符串了.
下面是我在 Draw()函数中实现的显示代码:
void CECommerceRestaurantContainer::Draw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
const CFont* myFont = NULL;
//myFont = LatinPlain12();
//myFont = LatinBold12();
//gc.UseFont(iEikonEnv->AnnotationFont());
myFont = ApacPlain16();
赞助商链接