【问题标题】:I need a string that won't properly convert to ANSI using several code pages我需要一个无法使用多个代码页正确转换为 ANSI 的字符串
【发布时间】:2009-10-09 16:11:05
【问题描述】:

我的 .NET 库必须将字符串编组到 C 库,该库需要使用系统的默认 ANSI 代码页编码的文本。由于 .NET 支持 Unicode,因此用户可以将字符串传递给未正确转换为 ANSI 的库。例如,在英文机器上,“デスクトップ”会变成“?????”当传递给 C 库时。

为了解决这个问题,我编写了一个方法,通过将原始字符串与使用 ANSI 代码页转换的字符串进行比较来检测何时会发生这种情况。我想测试这个方法,但我真的需要一个保证不可编码的字符串。例如,我们在英文和日文机器(以及其他语言)上测试我们的代码。如果我编写测试以使用上面的日文字符串,当日文系统正确编码字符串时,测试将失败。我可以编写测试来检查当前系统的编码,但是每次添加/删除新语言时我都会做维护噩梦。

是否存在不使用 any ANSI 代码页编码的 unicode 字符?如果做不到这一点,是否可以使用来自足够多不同代码页的字符来构造字符串以保证失败?我的第一次尝试是使用汉字,因为我们不包括中文,但显然日语可以转换我尝试的汉字。

edit 我现在将接受提出格鲁吉亚字符串的答案,但我真的期待一个包含来自不同语言的少量字符的结果。我不知道我们是否打算支持格鲁吉亚语,所以目前看来还可以。现在我必须在每种语言上对其进行测试。快乐!

【问题讨论】:

    标签: testing unicode internationalization


    【解决方案1】:

    有很多只使用 Unicode 的语言。格鲁吉亚人就是其中之一。这是格鲁吉亚语中的“英语”一词:ინგლისური 您可以在CLDR DB 的格鲁吉亚文件 (ka.xml) 中找到更多信息。

    【讨论】:

      【解决方案2】:

      如果“ANSI”是指 Windows 代码页,我很确定 BMP 中的字符不会被任何 Windows 代码页覆盖。

      例如,尝试一些Byzantine Musical Symbols

      【讨论】:

      • FWIW,GB18030 中出现了 BMP 之外的一些汉字。我的 2 美分,
      【解决方案3】:

      Windows 代码页涵盖所有 Unicode 字符(例如 Cp1200、Cp12000、Cp65000 和 Cp65001),因此并非总是可以创建不可转换的字符串。

      【讨论】:

        【解决方案4】:

        “ANSI 代码页”是什么意思?在 Windows 上,代码页是 Microsoft,而不是 ANSI。 ISO定义了8859-x系列代码集; Microsoft 拥有与其中大多数类似的 Windows 代码页。

        您是否在考虑单字节代码集?如果是这样,您应该在深奥的语言中查找Unicode 字符,这些字符不太可能是非 Unicode 单字节代码集。

        您可以查看以下语言:梵文、Oi Chiki、Cherokee、Ogham。

        【讨论】:

          猜你喜欢
          • 2015-12-24
          • 1970-01-01
          • 1970-01-01
          • 2014-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-17
          • 1970-01-01
          相关资源
          最近更新 更多