我的.NET库必须将字符串封送到C库,该C库需要使用系统的默认ANSI代码页编码的文本。由于.NET支持Unicode,因此用户可以将字符串传递给未正确转换为ANSI的库。例如,在英语机器上,“デスクトップ”将变为“?????”当传递给C库时。
为了解决这个问题,我编写了一个方法,通过将原始字符串与使用ANSI代码页转换的字符串进行比较来检测何时发生这种情况。我想测试这个方法,但我确实需要一个保证不可编码的字符串。例如,我们在英语和日语机器(以及其他语言)上测试我们的代码。如果我编写测试以使用上面的日语字符串,当日语系统正确编码字符串时,测试将失败。我可以编写测试来检查当前系统的编码,但每次添加/删除新语言时我都会遇到维护噩梦。
是否存在不使用任何 ANSI代码页编码的unicode字符?如果失败了,是否可以使用来自足够不同代码页的字符构造字符串以保证失败?我的第一次尝试是使用汉字,因为我们没有覆盖中文,但显然日语可以转换我试过的汉字。
编辑我将接受现在提出格鲁吉亚字符串的答案,但实际上是期待一个来自不同语言的一小部分字符的结果。我不知道我们是否计划支持格鲁吉亚人,所以现在似乎还可以。现在我必须在每种语言上测试它。快乐!
答案 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。