环境:
(1) EVC4 +CE5.0 中文模拟器
(2) EVC + 英文Windows CE 5.0 开发板 + 中文字库
由于要读文件,文件中的字符采用的是ANSI,显示前需要转换为Unicode。使用函数mbstowcs()进行转换。
(1)在模拟器环境下,一切正常。转换与显示都没有问题。
(2)在开发板上,由于系统不支持中文,所以采用动态加载一ttf字库的方式。显示不经过转换的Unicode字符正常,但显示通过mbstowcs()转换的字符串,显示为乱码。
调试(单步)发现,mbstowcs()转换后的字符串,已经是乱码。导致无法正确显示。
分析:可能与系统是英文有关。由于mbstowcs()函数执行,可能需要转换码表,但是英文系统没有。
有没有人遇到过此问题,请大家帮忙分析原因。
另外,使用函数MultiByteToWideChar(CP_ACP,0,&cInfoTmp[2],-1,ptcOutLRC,(iLengthTmp - 2) / 2);也出现同样的问题。
引用: 引用楼主 91program 的帖子:
(2)在开发板上,由于系统不支持中文,所以采用动态加载一ttf字库的方式。
难度很大耶.
因为系统不支持中文的情况下特别麻烦...通常都是乱码..(我们这边的系统都不支持中文)
我觉得需要系统支持中文的情况下才有可能..我帮你问问.看其他人怎么做的....
多谢LS的回复!
我这边一般的显示已经没有问题,只是从ANSI转换到Unicode有问题。
如果能正常转换,显示肯定不会有乱码问题。
不能把你的中文库注册到系统中吗?
我看ce-star能把整个系统的变成中文平台的。
试试两种方法,一是指定用936(简体)代码页,MultiByteToWideChar(936
二是建一个转换表.
Uint16 code Unicode[72][96]={
/*emp*/ 0,/*啊*/21834,/*阿*/38463,/*埃*/22467,/*挨*/25384,/*哎*/21710,/*唉*/21769,/*哀*/21696,/*皑*/30353,
/*癌*/30284,/*蔼*/34108,/*矮*/30702,/*艾*/33406,/*碍*/30861,/*爱*/29233,/*隘*/38552,/*鞍*/38797,/*氨*/27688,
不能回太长的内容,完整的汉字内码转UNICODE见:
http://www.at1.cn/bbs/viewthread.php?tid=12521
我也遇到过这个问题,我是用936代码页解决的.
windows ce应用程序设计 田东风 中有提到一点,
引用: 引用 5 楼 jiess 的回复:
试试两种方法,一是指定用936(简体)代码页,MultiByteToWideChar(936
二是建一个转换表.
Uint16 code Unicode[72][96]={
/*emp*/ 0,/*啊*/21834,/*阿*/38463,/*埃*/22467,/*挨*/25384,/*哎*/21710,/*唉*/21769,/*哀*/21696,/*皑*/30353,
/*癌*/30284,/*蔼*/34108,/*矮*/30702,/*艾*/33406,/*碍*/30861,/*爱*/29233,/*隘*/38552,/*鞍*/38797,/*氨*/27688,
第一种方法试过了,可能是由于没有936的Local,所以还是不行!
第二种方法我再试试
第一种方法成功。
在定制CE系统时,增加Local(但没有设置为默认,也不系统当前使用的Local),则MultiByteToWideChar转换成功。
嗯,是这样的,在Local代码页选项里是要把简体中文选上的, Code Page里最好多选点,反正也不占什么空间.
不选的话,OS里就没有相应的转换表的,因为OS可能也是查表来进行转换的.