UnicodeString到char *(UTF-8)

我正在使用OS X上的C ++ ICU库。我所有的string都是UnicodeStrings,但是我需要使用像fopen,fread等系统调用。 这些函数使用const char *或char *作为参数。 我已经读过,OS X在内部支持UTF-8,所以我需要做的就是将我的UnicodeString转换为UTF-8,但我不知道该怎么做。

UnicodeString有一个toUTF8()成员函数,但它返回一个ByteSink。 我也发现这些例子: http : //source.icu-project.org/repos/icu/icu/trunk/source/samples/ucnv/convsamp.cpp和阅读有关使用转换器,但我仍然困惑。 任何帮助将非常感激。

调用UnicodeString::extract(...)提取到一个char *,传递NULL为转换器获得默认的转换器(这是你的操作系统将使用的字符集)。

ICU用户指南> UTF-8提供了相关的方法和描述。

在UTF-16 API中使用UTF-8字符串最简单的方法是通过fromUTF8(const StringPiece &utf8)toUTF8String(StringClass &result)的C ++ icu::UnicodeString方法。 还有toUTF8(ByteSink &sink)

extract()现在不是首选。

注意: icu::UnicodeString具有构造函数, icu::UnicodeString setTo()extract()方法,可以使用转换器对象或字符集名称。 这些可以用于UTF-8,但不如上面提到的fromUTF8() / toUTF8() / toUTF8String()方法那么高效和方便。

这将工作:

 std::string utf8; uStr.toUTF8String(utf8);