簡體   English   中英

C中的UTF8處理

[英]UTF8 processing in C

我對 UTF8 有基本的了解:碼點的長度是可變的,所以一個“字符”可以是 8 位、16 位,甚至更長。

我想知道的是 C 語言中是否有一些示例代碼、庫等與 UTF8 字符串類似,比如 CEg 中的標准庫告訴字符串的長度等。

謝謝,

GNU 確實有一個 Unicode 字符串庫,稱為libunistring ,但它幾乎不能像ICU那樣處理任何事情。

例如,GNU 庫甚至不允許您訪問排序規則,這是所有字符串比較的基礎。 相比之下,ICU 可以。 ICU 沒有出現 GNU 的另一件事是 Unicode 正則表達式。 為此,您可能希望使用Phil Hazel 出色的 PCRE 庫 C ,它可以使用 UTF-8 支持進行編譯。

但是,GNU 庫可能足以滿足您的需要。 我不太喜歡它的 API。 很亂。 如果你喜歡 C 編程,你可以試試Go 編程語言,它有很好的 Unicode 支持。 這是一種新語言,但小巧、干凈且使用起來很有趣。

另一方面,主要的解釋語言——Perl、Python 和 Ruby——都對 Unicode 有不同的支持,這比你在 C 中得到的要好。其中,Perl 的 Unicode 支持是最發達和最強大的。

請記住:僅支持更多字符是不夠的。 沒有這些規則,就沒有 Unicode。 最多,您可能有 ISO 10646:一個大字符集,但沒有規則。 我的口頭禪是“Unicode 不僅僅是更多的字符; 這是更多的字符加上一大堆處理它們的規則。”

處理 Unicode 的最重要的庫是IBM 的 ICU

但是,如果您需要做的只是確定 UTF-8 編碼字符串中的代碼點數,請計算值介於\\x01\\x7F之間或介於\\xC2\\xFF之間的字符數。

如果您對不分配內存並使用堆棧的庫感興趣,您可以嘗試utf8rewind

暫無
暫無

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

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