我使用ICU库在C++在OS X上我所有的字符串是UnicodeStrings,但我需要使用系统调用像FOPEN,FREAD等等。这些函数使用const char *或char *作为参数。我已经读过OS X在内部支持UTF-8,所以我需要做的就是将UnicodeString转换为UTF-8,但我不知道该怎么做。的UnicodeString为char *(UTF-8)
的UnicodeString具有toUTF8()成员函数,但它返回一个ByteSink。我也发现了这些例子:http://source.icu-project.org/repos/icu/icu/trunk/source/samples/ucnv/convsamp.cpp并阅读了关于使用转换器,但我仍然困惑。任何帮助将非常感激。
谢谢!这确实有效。我不确定destCapacity参数和UnicodeString的长度。此代码的工作原理:http://codepad.org/blaSP0ex但您会注意到我手动加倍UnicodeString的.length()以弥补多字节字符串。我如何确保char * dest中有足够的空间? – zfedsa 2010-06-30 18:55:54
http://icu-project.org/apiref/icu4c/classUnicodeString.html#125255f27efd817e38806d76d9567345 如果没有足够的空间,它将返回输出字符串所需的长度和状态为U_BUFFER_OVERFLOW_ERROR的状态。请参阅http://userguide.icu-project.org/strings#TOC-Using-C-Strings:-NUL-Terminated-vs%2e – 2010-07-01 00:04:13
谢谢。该文档说最好猜测大小以及是否存在缓冲区溢出错误,然后再次调用具有从第一次调用返回的长度的提取函数。我这样做:http://codepad.org/nyp5yJWB但第二个调用仍然失败,即使我提供了正确的长度从第一个提取调用返回。我究竟做错了什么? – zfedsa 2010-07-01 14:37:03