Chuyu-Team / YY-Thunks

Fix DecodePointer, EncodePointer,RegDeleteKeyEx etc. APIs not found in Windows XP RTM.
MIT License
567 stars 103 forks source link

LocaleNameToLCID 问题 #73

Closed gexgd0419 closed 5 months ago

gexgd0419 commented 7 months ago

LocaleNameToLCID 在不支持该函数的 XP 系统上是查表实现的。

https://github.com/Chuyu-Team/YY-Thunks/blob/b79ce32cc2d777838578f35467e6a281a8cdb98d/src/Thunks/api-ms-win-core-localization.hpp#L988-L993

表格为了二分查找做了排序,但是排序是按照区分大小写时的 ASCII 顺序排列的,例如 zh-HK 排在 zh-Hans 前面。

https://github.com/Chuyu-Team/YY-Thunks/blob/b79ce32cc2d777838578f35467e6a281a8cdb98d/src/Thunks/api-ms-win-core-localization.hpp#L1340-L1345

而比较字符串时使用的 wcsicmp 会将两边字符串都转换成小写再比较,这样一来 zh-hans 应该排在 zh-hk 前面。顺序的错乱导致某些 locale name 不能正常转换得到 LCID。

另外这个表格缺失某些项目,例如中性的 zh (LCID = 0x7804) 就没有出现在表格中。

mingkuang-Chuyu commented 6 months ago

感谢反馈,你说的非常有道理。这部分代码复制了CRT的locale downlevel,看起来吧微软的Bug一并带过来了。

mingkuang-Chuyu commented 6 months ago

我观察更新,你不仅修复了列表排序问题,还更新了表格里的内容,比如 prs-AF 更新为 fa-AF。 但是对于早期系统比如Vista,这任然是 prs-AF 。我不确定这样更改是否会带来其他灾难性的影响。我需要评估一下。

mingkuang-Chuyu commented 5 months ago

https://github.com/Chuyu-Team/YY-Thunks/releases/tag/v1.0.10-Beta1 已经修复,请查收