9

我在 OS X 上使用 C++ 中的 ICU 库。我所有的字符串都是 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并阅读了有关使用转换器的信息,但我仍然感到困惑. 任何帮助将非常感激。

4

3 回答 3

7

调用UnicodeString::extract(...)以提取到 char*,将 NULL 传递给转换器以获取默认转换器(在您的操作系统将使用的字符集中)。

于 2010-06-30T17:31:08.487 回答
4

ICU 用户指南 > UTF-8提供了这样做的方法和描述。

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

而且extract()现在不是首选。

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

于 2014-04-06T05:58:23.547 回答
3

这将起作用:

std::string utf8;
uStr.toUTF8String(utf8);
于 2013-10-23T23:54:22.473 回答