exe程序,内部使用的编码:gbk
gbk:'新2'
0xd0 0xc2 0x32
转utf-8:'鏂?'
长度:4
0xe6 0x96 0xb0 0x32
存储到注册表(REG_SZ)...
从注册表读取数据:
utf-8:'鏂?'
len-utf8:4
0xe6 0x96 0x3f 0x0
为什么将一个含中文的字符串,由原来gbk编码转换成utf-8编码后,存储到注册表(REG_SZ),然后再读出来的时候,数据就不对了呢,0x3f 什么情况?
我尝试过,存储到 REG_BINARY 类型的注册表项中,数据不会被改写。
但因为一些原因,字符串必须要由原来的gbk转换成utf-8编码,并且必须存储在REG_SZ类型的注册表项中。
该如何解决这个问题呢?
不吝赐教。
了解REG_SZ应该是NULL结尾的字符串,对对它进行存取时记得结尾带个一个NULL以示字符串结束,另外在你程序里面用什么编码的字符串接收的?没有出现utf8存入,string接收,编解码不匹配的情况吧######
使用 c 语言写的程序, 程序默认使用的是 gbk 编码。
char *pszText = "新2"; // 0xd0 0xc2 0x32
使用 iconv() 将 pszText 转换成 utf-8 编码:0xe6 0x96 0xb0 0x32
存储到注册表 (REG_SZ),再读取的时候发现变成:0xe6 0x96 0x3f 0x0
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。