首页 > 解决方案 > 如何为 Windows 创建自定义单字节字符集?

问题描述

Windows 使用一些非 unicode 应用程序的编码表将字符从 unicode 表映射到 1 字节表。有许多预定义的字符集,用户可以在 windows 设置中选择一个。我需要创建一个自定义字符集。我在哪里可以找到有关该过程的一些信息?我试着用谷歌搜索它,但没有任何运气,我猜,很少有人这样做。

标签: windowscharacter-set

解决方案


AFAIK,你不能那样做,我认为甚至没有办法为它编写一些内核模式“驱动程序”,但是,暂时没有研究这些东西,也许有一些方法(现在) .

在任何情况下,您最好使用可以更改/更新的库,例如 libiconv。

更新:

由于您没有源代码,因此您处于非常不幸的位置。

对于所有字符串资源(在 EXE 或任何 DLL 中,或者虽然不太可能,在某些其他文件中),您可以“读出它们”并找出其中使用的代码页并更改它(以及字符串本身) ,以某种方式对其进行调整以实现您的目的-出现正确的字形(是的,您实际上可能会在记事本中看到不同的字形,但是,谁在乎您的应用程序是否显示正确的字形-FWIW,对于此类黑客,最好使用十六进制编辑器)。然后,当然,将(更改的)资源“放”回(EXE/DLL)中。但是,很可能并非所有字符串都在资源中,这就是“真正的”问题开始的时候。

可以在这里完成任何数量的黑客攻击。您最好的选择是使用一些好的调试器(WinDbg 或更好的)并弄清楚发生了什么以及如何处理字符集 = 因为您没有源代码,所以会很痛苦。您想了解:

  1. 是使用默认字符集(OEM/ANSI)还是某些特定字符集(通过 NLS API)?
  2. 无论使用什么字符集,它是否是标准字符集?这里的字符集是 Windows 分配给它的“代码”。查看可用字符集的 Windows 列表。
  3. 应用程序是否安装字体?如果是,请使用字体工具检查它们 - 也许它支持特定的(非标准?)代码页。
  4. 应用程序是否安装了一些驱动程序。如果是这样,获得更多洞察力的唯一方法是使用内核调试器(这非常棘手和烦人,但是,如前所述,您处于不幸的境地)。

推荐阅读