ANSI to Unicode 转换与系统语言的问题

xdsg   2008-5-6 08:20 楼主
环境:

(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);也出现同样的问题。

回复评论 (9)

引用: 引用楼主 91program 的帖子:
(2)在开发板上,由于系统不支持中文,所以采用动态加载一ttf字库的方式。


难度很大耶.
因为系统不支持中文的情况下特别麻烦...通常都是乱码..(我们这边的系统都不支持中文)

我觉得需要系统支持中文的情况下才有可能..我帮你问问.看其他人怎么做的....
点赞  2008-5-6 08:43
多谢LS的回复!

我这边一般的显示已经没有问题,只是从ANSI转换到Unicode有问题。
如果能正常转换,显示肯定不会有乱码问题。
点赞  2008-5-6 08:49
好技术库,不容错过:http://www.ciitc.com
点赞  2008-5-6 08:59
不能把你的中文库注册到系统中吗?

我看ce-star能把整个系统的变成中文平台的。
点赞  2008-5-6 10:15
试试两种方法,一是指定用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,
点赞  2008-5-6 10:27
不能回太长的内容,完整的汉字内码转UNICODE见:
http://www.at1.cn/bbs/viewthread.php?tid=12521
我也遇到过这个问题,我是用936代码页解决的.
windows ce应用程序设计 田东风 中有提到一点,
点赞  2008-5-6 10:35
引用: 引用 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,所以还是不行!

第二种方法我再试试
点赞  2008-5-6 10:58
第一种方法成功。

在定制CE系统时,增加Local(但没有设置为默认,也不系统当前使用的Local),则MultiByteToWideChar转换成功。
点赞  2008-5-6 11:44
嗯,是这样的,在Local代码页选项里是要把简体中文选上的, Code Page里最好多选点,反正也不占什么空间.
不选的话,OS里就没有相应的转换表的,因为OS可能也是查表来进行转换的.
点赞  2008-5-6 14:11
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复