2012-01-07 61 views
1

對於處理ASCII,我們有strlen,strcat等。 對於UTF16(即UCS2),我們有wcscatwcslen函數。什麼是(一些)UTF8字符串函數C

用於處理UTF8和UCS4 C中可用的功能是什麼? 假設Linux/gcc

+1

在POSIX OS上'wchar_t'通常是4個字節寬,因此代表UCS4。並且:UTF16比UCS2多/多。你想要的行爲究竟是什麼?字形的數量或代碼點的數量? – filmor 2012-01-07 10:15:31

+0

我想了解Unicode的不同編碼。 whcar_t用於表示Windows中的USC2和Linux中的USC4(whchar_t在Windows中爲2個字節,在Linux中爲4個字節)。 wchar_cannot不能用於UFT8/UTF16 - 對嗎? – 2012-01-07 17:14:33

+0

那麼,它當然可以/至少用於Windows的UTF16。但是你不會從'wcslen'等人得到明智的數據。恕我直言,你最好遠離'wchar_t'來處理所有必須可移植的東西,並在內部使用帶有UTF8輔助函數的'std :: string'。但這很大程度上取決於你的用例。 – filmor 2012-01-08 12:26:52

回答

3

我不認爲標準C庫具有UTF-8功能。肯定有它的圖書館。

但是,在很多情況下,正常的str函數可以與UTF-8一起使用。
strlen工作正常,返回字節數(不是字符)。 strcat工程(它也容易超過你的緩衝區,但這是正常的strcat)。

原因是0字符不能出現在多字節的UTF-8數據中。因此,如果它出現在UTF-8字符串中,它肯定是它的結束,就像在ASCII中一樣。

3

該標準沒有規定用於寬字符函數的編碼或大小,因此假設它是UCS2,UCS4或其他任何東西都不是可移植的。 C11爲標準化的Unicode提供了支持,但我認爲現在應該儘早依賴該標準。你最好的選擇是找到一個庫來處理UTF8/UCS4的轉換或你可能需要的任何其他編碼。

看一看iconv,或者GNU C庫手冊中關於character handling的章節。

相關問題