开发者社区> 问答> 正文

将 gbk 编码的汉字转码成 utf-8,保存到注册表 REG_SZ, 出现数据改写的问题:报错

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类型的注册表项中。

该如何解决这个问题呢?

不吝赐教。

 

 

展开
收起
kun坤 2020-06-06 23:39:49 874 0
1 条回答
写回答
取消 提交回答
  • 了解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

    2020-06-06 23:39:55
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载