windows - 如何将 encodingName 转换为 codePage 标识符?

标签 windows winapi unicode character-encoding codepages

给定一个编码名称,我怎样才能得到相应的 codePage identifier?

例如:

  • “iso-8859-1”:28591
  • “windows-1252”:1252
  • “IBM500”:500
  • “utf-16le”:1200
  • “utf-8”:65001

假设用例: Windows 函数 MultiByteToWideChar只需要一个 CodePage,而我只有一个 encodingName .

EnumSystemCodePages返回字符串列表,而不是代码页标识符(因此您不能将它们传递给 GetCPInfo )。

红利阅读

最佳答案

您所要求的没有 Win32 API。

如果可以使用 .NET,则可以创建 System.Text.Encoding 的对象实例使用 Encoding.GetEncoding(String) 来自编码名称的类方法,然后你可以阅读它的CodePage属性(property)。

否则,您可以查看以下注册表项:

HKEY_CLASSES_ROOT\MIME\Database\Codepage
HKEY_CLASSES_ROOT\Mime\Database\Charset

但是,请注意注册表中存在一些不准确之处。例如,iso-8859-1 被映射到代码页 1252,而不是更受欢迎的 28591。

否则,您只需根据需要在代码中创建自己的查找表。

关于windows - 如何将 encodingName 转换为 codePage 标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53747481/

相关文章:

c++ - 是否可以保护内存区域免受 WinAPI 的影响?

c++ - 如何检查 HANDLE 是否有效?

c++ - 使用 icu 库将 UTF-8 转换为 UCS-2

unicode - 位置的unicode字符是什么?

html - 我如何让 perl 从我的 html 表单中读取值作为 unicode?

windows - 当用户创建挂载点时如何获得通知?

c++ - 使用 symstore.exe 无法在 Windbg 或 Visual Studio 中为小型转储加载符号

c - Windows下动态加载库的地址范围

c++ - 定时器的使用

c++ - 使用 nBufferMax 等于 0 的 LoadString