半角和全角片假名和带同音标记的平假名字符被视为不同

本文可帮助你解决 .NET Framework 4 时发生的问题。x 应用程序比较日语字符串。

适用于: Windows 10 版本 2004、Windows 10 版本 20H2、Windows 10 版本 21H1、Windows 10 版本 21H2、Windows 10 版本 22H2

现象

某些日语半角和全角片假名和具有同音标记的平假名字符不会解释为同一个字符。 使用 CompareInfo.IndexOf 方法和 IgnoreKanaTypeIgnoreWidth 选项 CompareOptions 进行比较时,由于排序规则中存在问题,这些字符的计算结果不同。

原因

从版本 2004 开始,Windows 10 将国家语言支持版本(NLS)更新为 6.3,并添加了对阿拉伯语和希伯来语的支持。 此添加会影响对使用 NLS 的日语字符串比较进行排序的规则,以便比较将产生不同的结果。

解决方法

警告

如果注册表修改不正确,可能会发生严重问题。 这些问题可能会导致你必须重新安装操作系统,甚至阻止计算机启动。 Microsoft 不能保证可解决这些问题。 在修改注册表之前,请备份注册表,以便在出现问题时可以还原。 您应自行承担修改注册表的风险。

解决方法 1

将 NLS 排序规则还原到版本 6.2。 此版本用于 Windows 10 版本 1909 和更低版本。 当必须在系统之间共享数据时,请考虑一致地应用解决方法。 如果使用此解决方法,请进行足够的测试和评估,以缓解由多个系统上的不同排序规则版本引起的问题。

若要使用此解决方法,请执行以下步骤:

  1. 以管理员身份打开命令提示符窗口(cmd.exe)。

  2. 运行以下命令:

    reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Sorting\Versions /ve /d 0006020F /f

  3. 重新启动计算机或进程以查看完整效果。

重要

如果尚未在计算机上安装KB4586853或更高版本的更新,则设置此注册表项中的无效值可能会阻止计算机启动。

解决方法 2

将 NLS 排序规则设置为版本 6.4。 此版本在 Windows 11 中使用。 为此,必须应用KB5014023或更高版本更新,并将版本升级到版本 1741 或更高版本。 在这种情况下,版本 22H2 已应用,无需更新。

  1. 对 Windows 10 版本 2004、20H2、21H1 和 21H2 应用KB5014023或更高版本的更新。

  2. 以管理员身份打开命令提示符窗口(cmd.exe)。

  3. 运行以下命令:

    reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Sorting\Versions /ve /d 00060403 /f

  4. 重新启动计算机或进程以查看完整效果。