windows - 如何为 Windows 创建自定义单字节字符集?
问题描述
Windows 使用一些非 unicode 应用程序的编码表将字符从 unicode 表映射到 1 字节表。有许多预定义的字符集,用户可以在 windows 设置中选择一个。我需要创建一个自定义字符集。我在哪里可以找到有关该过程的一些信息?我试着用谷歌搜索它,但没有任何运气,我猜,很少有人这样做。
解决方案
AFAIK,你不能那样做,我认为甚至没有办法为它编写一些内核模式“驱动程序”,但是,暂时没有研究这些东西,也许有一些方法(现在) .
在任何情况下,您最好使用可以更改/更新的库,例如 libiconv。
更新:
由于您没有源代码,因此您处于非常不幸的位置。
对于所有字符串资源(在 EXE 或任何 DLL 中,或者虽然不太可能,在某些其他文件中),您可以“读出它们”并找出其中使用的代码页并更改它(以及字符串本身) ,以某种方式对其进行调整以实现您的目的-出现正确的字形(是的,您实际上可能会在记事本中看到不同的字形,但是,谁在乎您的应用程序是否显示正确的字形-FWIW,对于此类黑客,最好使用十六进制编辑器)。然后,当然,将(更改的)资源“放”回(EXE/DLL)中。但是,很可能并非所有字符串都在资源中,这就是“真正的”问题开始的时候。
可以在这里完成任何数量的黑客攻击。您最好的选择是使用一些好的调试器(WinDbg 或更好的)并弄清楚发生了什么以及如何处理字符集 = 因为您没有源代码,所以会很痛苦。您想了解:
- 是使用默认字符集(OEM/ANSI)还是某些特定字符集(通过 NLS API)?
- 无论使用什么字符集,它是否是标准字符集?这里的字符集是 Windows 分配给它的“代码”。查看可用字符集的 Windows 列表。
- 应用程序是否安装字体?如果是,请使用字体工具检查它们 - 也许它支持特定的(非标准?)代码页。
- 应用程序是否安装了一些驱动程序。如果是这样,获得更多洞察力的唯一方法是使用内核调试器(这非常棘手和烦人,但是,如前所述,您处于不幸的境地)。
推荐阅读
- python - Pandas 将列值匹配到同一数据框中的多个列
- r - 即使不存在也添加中断
- date - 如何在 Amazon Redshift 查询中选择上个季度/最近 2 个月的数据
- rollup - 别名或替换外部模块不起作用
- java - 使用 Gradle 为源代码生成 jar
- ldap - Apache Directory Studio:如何搜索自特定日期以来未更新的 LDAP 属性?
- postgresql - 无法在 postgresql 中创建用户
- google-sheets - 有没有办法让工作表根据日期和时间自动填充数据
- c++ - UE4 C++ 在初始化 HUDClass 后获取它的引用
- c# - 如何检查 customPrincipal 是否为空?