寻找如何使用ICU的简单实用的C ++示例

时间:2011-05-15 19:48:22

标签: c++ icu

我正在寻找关于如何使用ICU的简单实用的C ++示例。
ICU主页在这方面没有帮助。
我对Unicode的原因和原因不感兴趣。
少数演示不是自包含的,也不是可编译的例子(包含在哪里?)
我正在寻找像'Hello,World'这样的东西:
如何打开和读取以UTF-8编码的文件
如何使用STL / Boost字符串函数来操作UTF-8编码的字符串 等

2 个答案:

答案 0 :(得分: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/

  • 的更多样本

希望这会有所帮助

答案 1 :(得分:9)

除非您需要处理字节顺序标记(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 reference

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