24

我正在寻找有关如何使用 ICU 的简单实用 C++ 示例。
ICU 主页在这方面没有帮助。
我对什么和为什么 Unicode 不感兴趣。
少数演示不是自包含且不可编译的示例(包含在哪里?)
我正在寻找类似“Hello, World”的内容:
如何打开和读取以 UTF-8 编码的
文件操作 UTF-8 编码字符串等的函数。

4

2 回答 2

12

除非您需要处理字节顺序标记 (BOM),否则没有特殊的方法可以读取 UTF-8 文件。由于 UTF-8 编码的工作方式,读取 ANSI 字符串的函数也可以读取 UTF-8 字符串。

以下代码将读取文件(ANSI 或 UTF-8)的内容并进行几次转换。

#include <fstream>
#include <string>

#include <unicode/unistr.h>

int main(int argc, char** argv) {
    std::ifstream f("...");
    std::string s;
    while (std::getline(f, s)) {
        // at this point s contains a line of text
        // which may be ANSI or UTF-8 encoded

        // convert std::string to ICU's UnicodeString
        UnicodeString ucs = UnicodeString::fromUTF8(StringPiece(s.c_str()));

        // convert UnicodeString to std::wstring
        std::wstring ws;
        for (int i = 0; i < ucs.length(); ++i)
            ws += static_cast<wchar_t>(ucs[i]);
    }
}

看看在线API 参考

如果您想通过 Boost 使用 ICU,请参阅Boost.Locale

于 2011-05-15T23:15:18.070 回答
10
  • ICU ≠ Boost,所以你会找到如何使用 ICU 函数来操作字符串的示例,但不是 Boost。

  • 你在看哪些样品?ICU 源代码树中有样本,位于 icu/source/samples 下 - 我认为转换器样本在那里打开和关闭 utf-8,还有 icu/source/extras/uconv,这是一个类似“iconv”的应用程序。

  • 更多示例在http://source.icu-project.org/repos/icu/icuapps/trunk/

希望这可以帮助

于 2011-05-17T18:19:08.600 回答