我需要一个使用多个代码页无法正确转换为ANSI的字符串

时间:2009-10-09 16:11:05

标签: testing unicode internationalization

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

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

是否存在不使用任何 ANSI代码页编码的unicode字符?如果失败了,是否可以使用来自足够不同代码页的字符构造字符串以保证失败?我的第一次尝试是使用汉字,因为我们没有覆盖中文,但显然日语可以转换我试过的汉字。

编辑我将接受现在提出格鲁吉亚字符串的答案,但实际上是期待一个来自不同语言的一小部分字符的结果。我不知道我们是否计划支持格鲁吉亚人,所以现在似乎还可以。现在我必须在每种语言上测试它。快乐!

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

例如,尝试一些Byzantine Musical Symbols

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

您可以查看以下语言:Devanagari,Oi Chiki,Cherokee,Ogham。