zoukankan      html  css  js  c++  java
  • '新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 来存储,是否可以解决上述问题呢?

    有空试一下

  • 相关阅读:
    简要集群复制shell脚本
    git命令
    gitlab部署
    QPS、TPS、并发用户数、吞吐量关系
    Windows admin center
    ftp命令行工具
    ftp ftps sftp
    部署 Nethogs
    smtp imap
    如何在【博客园】通过搜索 博主 昵称 来找到博主?
  • 原文地址:https://www.cnblogs.com/personnel/p/14288233.html
Copyright © 2011-2022 走看看