.net 如何在API中表示Unicode字符
这与其说是一个Unicode问题,不如说是一个MBCS问题。我需要创建一个API,它返回一个结构列表,每个实例将一个Unicode字符作为其成员之一。这是在.NET中,所以您可能认为我需要UTF-16,但对于亚洲字符,需要两个字符。返回Unicode字符的最佳实践是什么.net 如何在API中表示Unicode字符,.net,api,unicode,mbcs,.net,Api,Unicode,Mbcs,这与其说是一个Unicode问题,不如说是一个MBCS问题。我需要创建一个API,它返回一个结构列表,每个实例将一个Unicode字符作为其成员之一。这是在.NET中,所以您可能认为我需要UTF-16,但对于亚洲字符,需要两个字符。返回Unicode字符的最佳实践是什么 使用一个由2个UTF-16字符组成的数组-测试第一个字符,看看它是否是代理字符,是否有一个计数 忽略代理项问题,让调用者自行确定实际的glyph编码跨结构 改用字符串,这样我就不在乎它的长度是一个字符还是两个字符 使用UTF-3
我想我要做第三件事。其他人做了什么?关于使用字符串,您是对的。在Unicode中,因为即使是单个字符也可能需要多个代码点(每个代码点都需要一定数量的字节,具体取决于编码),所以除了字符串之外,您无法处理任何其他字符。甚至像
isUpper
之类的函数也应该使用字符串,并且只处理它的第一个元素
一个字符可能需要多个代码点的原因通常是因为组合字符、重音等
看看这个。关于使用字符串,你是对的。在Unicode中,因为即使是单个字符也可能需要多个代码点(每个代码点都需要一定数量的字节,具体取决于编码),所以除了字符串之外,您无法处理任何其他字符。甚至像
isUpper
之类的函数也应该使用字符串,并且只处理它的第一个元素
一个字符可能需要多个代码点的原因通常是因为组合字符、重音等
看看这个。一开始我确信口音不会有问题,但我认为事实上是这样的。我假设会有一个规范化表单,它将使所有内容都适合于单个代码点。在我的例子中,我想将glyph+任何数量的重音作为一个“字符”来处理。是的,只有一些重音字符可以放入一个代码点,通常是来自unicode之前的字符集。起初我相信重音不会有问题,但我想实际上是这样的。我假设会有一个规范化表单,它将使所有内容都适合于单个代码点。在我的例子中,我希望将glyph+任意数量的重音字符视为单个“字符”。是的,只有一些重音字符可以放入单个代码点,通常是来自unicode之前的字符集。