2013-05-02 111 views
3

我需要確定以字節爲單位的UTF-8字符串的長度。如何正確執行?據我所知,在UTF-8終端符號中有1個字節的大小。我可以使用strlen這個功能嗎?以字節爲單位的UTF-8字符串大小

+0

UTF-8沒有定義字符串如何終止。使用空字符「'\ 0」來終止一個字符串是一個C約定。 – 2013-05-02 15:18:06

+2

UTF-8的重點在於,您不必更改任何**字符串處理實踐。只有解釋字符串字符的代碼纔有可能需要改變,即使這樣,通常只有當它對ASCII範圍以外的字符應用特殊解釋時才需要改變。諸如'strlen','strstr','strchr'(用於搜索單字節字符),'snprintf'等等都可以工作。 – 2013-05-02 16:07:13

+0

感謝您的解釋! – 2013-05-02 17:05:34

回答

11

我可以使用strlen函數嗎?

是,strlen給你一個字節數第一'\0'字符之前,所以

strlen(utf8) + 1 

是字節的utf8包括0終止的數量,因爲沒有比'\0'包含其它字符UTF-8中的0字節。

當然,只有在utf8實際上是UTF-8編碼的情況下才有效,否則您需要先將其轉換爲UTF-8。

+0

@JoopEggen:不,Latin-1和高級控制字符在UTF-8中不是單字節。 UTF-8中只有**的單字節字符是ASCII。無論如何,編碼與以字節爲單位測量字符串的大小無關。 – 2013-05-02 16:05:08

+0

@R .. right;實際上我只想提到UTF-8的優點,即整個7位ASCII範圍不會由於高位而在UTF-8多字節序列中錯誤地發現。 – 2013-05-02 20:46:42

2

是的,strlen()將簡單地計數字節,直到它遇到NUL,這是0終止的UTF-8編碼C字符串的正確終結符。

相關問題