Symbian之如何编写中文程序  [04-9-21] [ from 本站原创]  

开始研究Symbian应用程序的开发,中国的程序员很倒霉,每次都要被中文问题搞得头晕脑涨。

在Symbian程序用户界面上的中文,可以直接通过程序输出,例如给字符串赋值为中文并可直接显示。但是更多的时候用户界面是通过资源文件中定义,Symbian资源文件存储在一个以rss为扩展名的文件中,界面上元素的文本,例如菜单项文本,按钮文本等都是在这个文件中定义。但是这个文件并不支持中文的显示,你如果直接把文本改成中文,那么编译后程序执行就会是乱码。虽然不支持中文,但是可以用UNICODE来显示中文的信息,我们只需要在rss文件头加入 CHARACTER_SET UTF8 一行,然后把所有的中文文本用UNICODE替换即可。

但是怎么得到一个中文对应的UNICODE文本串呢? 例如“退出”的UNICODE文本是“閫?鍑”,为此花了一些时间搞了一个小工具用来完成这个转换过程。

下图是工具运行后的界面:

可在此处下载该工具:http://www.javayou.com/download/GBK2Uni.exe?id=uniqueid

[Edit on 2004-10-08 09:44:22 By ld]

此日记TrackBack地址: http://www.javayou.com/trackback.do?log_id=448
In [开发手记] By [刘冬] at 04-9-21 9:52 | Comments [3] | TB [0] | 230 Views

≡≡≡ 网友评论 ≡≡≡
刘冬 网友说:

还是把这个小工具最主要的两个转换函数的源码贴出来吧:

/**
 * GBK->UNICODE
 */
void CGBK2UnicodeDlg::OnConvertText()
{
 //我的视图      鎴戠殑瑙嗗浘
 UpdateData(TRUE);

 int wc = WideCharToMultiByte(CP_UTF8,0,m_txt_input.AllocSysString(),m_txt_input.GetLength(),0,0,NULL,NULL);

 TCHAR* sUnicode = new TCHAR[wc+1];
 sUnicode[wc] = 0;

 WideCharToMultiByte(CP_UTF8,0,m_txt_input.AllocSysString(),m_txt_input.GetLength(),sUnicode,wc,NULL,NULL);
 SetDlgItemText(IDC_UNICODE_TEXT, sUnicode);

 if(sUnicode)
  delete[] sUnicode;

 GetDlgItem(IDC_GBK_TEXT)->SetFocus();
}

/**
 * UNICODE->GBK
 */
void CGBK2UnicodeDlg::OnReverseText()
{
 UpdateData(TRUE);

 int wc = MultiByteToWideChar(CP_UTF8,0,m_txt_input,m_txt_input.GetLength(),0,0);

 wchar_t* sUnicode = new wchar_t[wc+1];
 sUnicode[wc] = 0;

 MultiByteToWideChar(CP_UTF8,0,m_txt_input,m_txt_input.GetLength(),sUnicode,wc);
 
 CString unicode(sUnicode);
 SetDlgItemText(IDC_UNICODE_TEXT, unicode);

 if(sUnicode)
  delete[] sUnicode;

 GetDlgItem(IDC_GBK_TEXT)->SetFocus();
}

[Edit on 2004-09-21 14:54:28 By 刘冬]
at 04-09-21 14:51  
刘冬 网友说:
有BUG:当中文字是奇数个字的时候,会被截断!正在解决......
at 04-09-28 16:27  
刘冬 网友说:
研究很久此问题还是无解,发现Windows自带的程序都有同样的问题,大家如果发现转不了码的字符串就在后面多加一个空格就可以了。
at 04-10-08 10:15  
上一篇 工作回忆录(一)


Trackback: http://tb.donews.net/TrackBack.aspx?PostId=166623


[点击此处收藏本文]  发表于2004年11月11日 5:07 PM




正在读取评论……
添加评论
大名
网址


验证码
评论