如何在API中表示Unicode字符

时间:2010-02-19 02:28:58

标签: .net api unicode mbcs

这是一个MBCS问题,而不是Unicode问题。我需要创建一个API,它返回一个结构列表,每个实例都包含一个Unicode字符作为其成员之一。这是在.NET中,所以你认为我想要UTF-16,但对于亚洲字符,则需要两个字符。返回Unicode字符时最佳做法是什么?

  1. 使用2个UTF-16字符的数组 - 测试第一个字符以查看它是否是代理,是否有计数?
  2. 忽略代理问题并将其留给调用者以找出实际的字形编码跨度结构?
  3. 使用字符串代替,所以我不在乎它的长度是一个还是两个字符?
  4. 使用UTF-32
  5. 人们通常为UTF-8做些什么?我猜他们从不处理单个字符,并且所有内容都保存在字符串中(例如,在字符串中搜索字符实际上是通过查找子字符串来完成的)。也许这是我的C ++程序员,但字符串似乎很重要。

    我想我会做#3。其他人做了什么?

1 个答案:

答案 0 :(得分:1)

你正确使用字符串。在Unicode中,因为即使是单个字符也可能需要多个代码点(根据编码,每个代码点都需要一定数量的字节),因此您不能真正处理任何比字符串更少的代码。甚至像isUpper之类的函数也应该使用一个字符串,并且只能处理它的第一个元素。

角色可能需要多个代码点的原因通常是因为组合字符,重音等等。

请参阅此question in the Unicode FAQ