打印
[开发工具]

求教MDK编stm32程序中unicode中文存储wchar问题

[复制链接]
3403|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
请帮忙解读一下,这个可能是什么原因?

使用特权

评论回复
5
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存储。

使用特权

评论回复
6
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

粉丝