[开发工具] 求教MDK编stm32程序中unicode中文存储wchar问题

[复制链接]
3964|5
 楼主| EAMCU 发表于 2015-12-29 10:13 | 显示全部楼层 |阅读模式
本帖最后由 EAMCU 于 2015-12-29 11:34 编辑

用mdk keil
stm32芯片
程序中要用中文,定义了字符串
wchar_t testchar[20] = L"测试";
按我自己的理解,里面应该存储unicode码,testchar[0] = 0x6D4B , testchar[1] = 0x8BD5
但是我实际上读出来发现里面是testchar[0] = 0x5A34 , testchar[1] = 0x5B2D
想不通,求指点
mmuuss586 发表于 2015-12-29 11:29 | 显示全部楼层
不一定是UNICONDE码;
找个汉字转16进制的软件测试下看看;
 楼主| EAMCU 发表于 2015-12-29 12:06 | 显示全部楼层
mmuuss586 发表于 2015-12-29 11:29
不一定是UNICONDE码;
找个汉字转16进制的软件测试下看看;

请问如何测试?
我在网上搜了“测试”两个汉字的unicode码,也查了wchar的资料。
资料说,根据系统不同,wchar一般为16位,也可能为32位,但是大多数字符数值上应该是相等的。
我自己从数组里读出来的值,我去验证了一下,不是gbk,不是big5,不是utf8,所以我很茫然。
 楼主| EAMCU 发表于 2015-12-29 15:04 | 显示全部楼层
有进展。
把“试”字删掉,改成如下定义
wchar_t testchar[20] = L"测";
无法编译通过, 出现如下两行提示
error:  #8: missing closing quote
  wchar_t testchar[20] = L"娴?;
而"娴”的unicode正是5A34
请帮忙解读一下,这个可能是什么原因?
 楼主| EAMCU 发表于 2015-12-29 15:13 | 显示全部楼层
EAMCU 发表于 2015-12-29 15:04
有进展。
把“试”字删掉,改成如下定义
wchar_t testchar[20] = L"测";

已搞定。
原因是mdk默认编码是utf8
解决办法是mdk的默认编码设置成utf8,但是c文件本身需要用别的工具转成ucs-2 big endian存储。
 楼主| EAMCU 发表于 2015-12-29 15:26 | 显示全部楼层
EAMCU 发表于 2015-12-29 15:13
已搞定。
原因是mdk默认编码是utf8
解决办法是mdk的默认编码设置成utf8,但是c文件本身需要用别的工具转 ...

我错了
搞不定
mdk先天不足,不支持ucs-2
自己改成ucs-2格式,但是只要自己一编辑,mdk就会把文件改回去utf8存储,然后就又不对了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

396

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部