1

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

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

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

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

4

1 回答 1

1

你是对的使用字符串。在 Unicode 中,因为即使是单个字符也可能需要多个代码点(每个代码点会占用一定数量的字节,具体取决于编码),因此您实际上无法处理字符串以外的任何内容。甚至像isUpper这样的函数也应该接受一个字符串,并且只对它的第一个元素起作用。

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

请参阅Unicode 常见问题解答中的此问题。

于 2010-02-19T03:25:15.127 回答