Windows 使用一些非 unicode 应用程序的编码表将字符从 unicode 表映射到 1 字节表。有许多预定义的字符集,用户可以在 windows 设置中选择一个。我需要创建一个自定义字符集。我在哪里可以找到有关该过程的一些信息?我试着用谷歌搜索它,但没有任何运气,我猜,很少有人这样做。
2 回答
AFAIK,你不能那样做,我认为甚至没有办法为它编写一些内核模式“驱动程序”,但是,暂时没有研究这些东西,也许有一些方法(现在) .
在任何情况下,您最好使用可以更改/更新的库,例如 libiconv。
更新:
由于您没有源代码,因此您处于非常不幸的位置。
对于所有字符串资源(在 EXE 或任何 DLL 中,或者虽然不太可能,在某些其他文件中),您可以“读出它们”并找出其中使用的代码页并更改它(以及字符串本身) ,以某种方式对其进行调整以实现您的目的-出现正确的字形(是的,您实际上可能会在记事本中看到不同的字形,但是,谁在乎您的应用程序是否显示正确的字形-FWIW,对于此类黑客,最好使用十六进制编辑器)。然后,当然,将(更改的)资源“放”回(EXE/DLL)中。但是,很可能并非所有字符串都在资源中,这就是“真正的”问题开始的时候。
可以在这里完成任何数量的黑客攻击。您最好的选择是使用一些好的调试器(WinDbg 或更好的)并弄清楚发生了什么以及如何处理字符集 = 因为您没有源代码,所以会很痛苦。您想了解:
- 是使用默认字符集(OEM/ANSI)还是某些特定字符集(通过 NLS API)?
- 无论使用什么字符集,它是否是标准字符集?这里的字符集是 Windows 分配给它的“代码”。查看可用字符集的 Windows 列表。
- 应用程序是否安装字体?如果是,请使用字体工具检查它们 - 也许它支持特定的(非标准?)代码页。
- 应用程序是否安装了一些驱动程序。如果是这样,获得更多洞察力的唯一方法是使用内核调试器(这非常棘手和烦人,但是,如前所述,您处于不幸的境地)。
这些表似乎位于 C:\Windows\system32*.nls。我不确定他们的结构是否有适当的文档。这里有一些俄语信息。此外,您可能想修改 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls 的注册表