如何使用ICU将Unicode代码点转换为C ++中的字符?

时间:2014-04-27 10:48:09

标签: c++ unicode icu

不知怎的,我在谷歌找不到答案。我正在搜索时可能会使用错误的术语。我正在尝试执行一个简单的任务,将表示字符的数字转换为字符本身,如下表所示:http://unicode-table.com/en/#0460

例如,如果我的数字是47(即'\'),我可以在char中输入47并使用cout打印它,我将在控制台中看到反斜杠(对于低于256的数字没有问题。

但如果我的号码是1120,那么这个角色应该是'Ѡ'(拉丁语中的欧米茄)。我假设它由几个字符表示(cout知道在打印到屏幕时转换为'Ѡ'。

如何获得代表'Ѡ'的“几个字符”?

我有一个名为ICU的库,我正在使用UTF-8。

2 个答案:

答案 0 :(得分:6)

您所谓的 Unicode编号通常称为代码点。如果您想使用C ++和Unicode字符串,ICU提供 icu :: UnicodeString 类。你可以find the documentation here

要创建包含单个字符的 UnicodeString ,您可以使用constructor that takes a code point in a UChar32

icu::UnicodeString::UnicodeString(UChar32 ch)

然后,您可以调用toUTF8String方法将字符串转换为UTF-8。

示例程序:

#include <iostream>
#include <string>

#include <unicode/unistr.h>

int main() {
    icu::UnicodeString uni_str((UChar32)1120);
    std::string str;
    uni_str.toUTF8String(str);
    std::cout << str << std::endl;

    return 0;
}

在像Debian这样的Linux系统上,你可以用以下代码编译这个程序:

g++ so.cc -o so -licuuc

如果您的终端支持UTF-8,则会打印一个欧米茄字符。

答案 1 :(得分:1)

注意:如果您遇到错误:“对icudt67_dat的未定义引用”,则需要链接-licudt,然后您的问题将得到解决。