簡體   English   中英

顯示Unicode字符

[英]Displaying Unicode Characters

我已經在這里搜索了此類問題的答案,並且找到了很多答案,但是對於此事的表面上看,瑣碎的問題我仍然存有疑惑。

我已經閱讀了這篇非常有趣的有關該主題的有用文章: http : //www.joelonsoftware.com/articles/Unicode.html ,但是這讓我想知道如何在給定Unicode數據緩沖區的情況下識別單個字形。

我的問題是:

我將如何解析Unicode字符串(例如UTF-8)?

假設我知道字節順序,當我遇到應該由6個字節表示的字形的開頭時會發生什么?

也就是說,如果我正確解釋了存儲方法。

這都與我要使用OpenGL的文本顯示系統有關。 我將字形數據存儲在顯示列表中,我需要將字符串的內容轉換為字形索引序列,然后將其映射到顯示列表索引(因為顯然,將整個字形集存儲在圖形內存中並不總是可行的)。

考慮到我需要顯示的所有內容,必須將每個字符串表示為短褲數組將需要大量存儲空間。

另外,在我看來,每個字符2個字節根本不足以表示每個可能的Unicode元素。

我將如何解析Unicode字符串(例如UTF-8)?

我假設通過“解析”,您的意思是轉換為代碼點。

通常,您不必這樣做。 例如,您可以在另一個UTF-8字符串中搜索UTF-8字符串,而無需關心這些字節代表什么字符。

如果確實需要轉換為代碼點(UTF-32),則:

  1. 檢查第一個字節以查看字符中有多少個字節。
  2. 查看字符的尾部字節,以確保它們在80-BF范圍內。 如果不是,請報告錯誤。
  3. 使用位掩碼和移位將字節轉換為代碼點。
  4. 如果獲得的字節序列長於表示字符所需的最小長度,則報告錯誤。
  5. 將指針增加序列長度,然后重復下一個字符。

另外,在我看來,每個字符2個字節根本不足以表示每個可能的Unicode元素。

不是。 Unicode最初固定為16位編碼的。 后來決定65,536個字符是不夠的,因此創建了UTF-16,並重新定義了Unicode以使用0到1,114,111之間的代碼點。

如果需要固定寬度的編碼,則需要21位。 但是使用21位整數類型的語言並不多,因此實際上您需要32位。

好吧,我認為這可以回答:

http://en.wikipedia.org/wiki/UTF-8

為什么我第一次去搜索時它沒有顯示,我不知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM