2012-01-07 47 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的章节。