2010-02-19 35 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

相關問題