2010-02-19 86 views
1

这是一个比Unicode问题更多的MBCS问题。我需要创建一个API,它返回一个结构体列表,每个实例拥有一个Unicode字符作为其成员之一。这是在.NET中,所以你会认为我想要UTF-16,但对于亚洲人来说,需要两个字符。返回Unicode字符时的最佳做法是什么?如何在API中表示Unicode字符

  1. 使用2个UTF-16字符的数组 - 测试第一个字符以查看它是否是代理,有一个计数?
  2. 忽略代理问题,让它给调用者找出实际的字形编码跨度结构?
  3. 使用字符串,所以我不在乎它是一个或两个字符的长度?
  4. 使用UTF-32

什么人通常为UTF-8呢?我猜他们从不处理单个字符,并且所有内容都保存在一个字符串中(例如,在字符串中搜索字符实际上是通过查找子字符串来完成的)。也许这是我的C++程序员,但是一个字符串看起来很沉重。

我想我会去做#3。别人做了什么?

回答

1

你对使用字符串是正确的。在Unicode中,因为即使是单个字符也可能需要多个代码点(每个代码点需要一定数量的字节,具体取决于编码方式),但实际上您无法处理比字符串更少的任何内容。即使像isUpper等函数也应该接受一个字符串,并且只能在第一个元素上工作。

字符可能需要多个代码点的原因通常是由于合成字符,口音等。

看到这个question in the Unicode FAQ

+0

起初我确信自己的口音不会是一个问题,但我认为他们确实是。我假设会有一个规范化表单,它可以使它们都符合单个代码点。在我的情况下,我想将字形+任意数量的重音作为单个“字符”处理。 – 2010-02-19 03:57:21

+0

是的,只有一些重音字符可以放入单个码点,通常是来自前Unicode字符集的码字。 – 2010-02-19 20:32:04

相关问题