• '新2' 采用 utf-8 编码存储到注册表后再读取出来,就吵是 '新2',也许与 注册表使用 Unicode 存储有关?


    问题描述:

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

    --------------------------------------------------------------------------------------------------------------------------------------------

    最近看到网上有一段关于注册表的描述:

    如果 dwType 是 REG_SZ、REG_MULTI U SZ 或 REG _EXPAND _SZ 类型,
    并且使用了此函数的ANSI版本(通过显式调用 RegSetValueExA 或在包含 Windows.h 文件之前不定义 UNICODE),
    则 lpData 参数指向的数据必须是 ANSI 字符串。字符串在存储到注册表中之前将转换为 Unicode。

    --------------------------------------------------------------------------------------------------------------------------------------------

    如果用 RegSetValueExW 来存储,是否可以解决上述问题呢?

    有空试一下

  • 相关阅读:
    JS替换字符串多余的空格符
    WebStorm2017.3.4版本 注册码
    使用$.getJSON()需要注意的地方
    45道CSS基础面试题(附答案)
    单机版搭建Hadoop环境图文教程详解
    Ubuntu下安装JDK图文详解
    VMtools安装以及设置
    Ubuntu 12.04中文输入法的安装
    Hadoop 学习之 FAQ
    java ant 命令大全
  • 原文地址:https://www.cnblogs.com/personnel/p/14288233.html
Copyright © 2020-2023  润新知