我知道如何从代码点返回Unicode字符。那不是我之后的事。我想知道的是如何返回与特定代码点关联的名称。例如,代码点为1F340。它的名字是FOUR LEAF CLOVER。我们可以用它的代码点返回这个名字吗?我已经阅读了大约100个涉及Unicode的主题。但我还没有看到一个人在讨论我的问题。我希望这是可能的。
感谢您的帮助。
答案 0 :(得分:0)
您是否考虑过ICU library?它提供以下C API:http://icu-project.org/apiref/icu4c/uchar_8h.html#aa488f2a373998c7decb0ecd3e3552079
int32_t u_charName(
UChar32 code,
UCharNameChoice nameChoice,
char* buffer,
int32_t bufferLength,
UErrorCode* pErrorCode)
检索Unicode字符的名称。
根据
nameChoice
,写入缓冲区的字符名称是“现代”名称或Unicode版本1.0中定义的名称。该名称仅包含“不变”字符,如A-Z,0-9,空格和“ - ”。仅当Unicode 1.0名称与现代名称不同并且数据文件包含它们的数据时,才会检索它们。可以使用命令行选项调用或不调用gennames,以在unames.dat中包含1.0名称。<强>参数强>
代码要获取名称的字符(代码点)。它必须是
0<=code<=0x10ffff
。nameChoice 要获取其名称的选择器。
缓冲区复制名称的目标地址。名称将始终为零终止。如果没有名称,则缓冲区将设置为空字符串。
bufferLength
==sizeof(buffer)
pErrorCode 指向UErrorCode变量的指针;在u_charName()返回后检查U_SUCCESS()。
<强>返回强>
名称的长度,如果此字符没有名称,则为0。如果bufferLength小于或等于length,则缓冲区包含截断的名称,返回的长度表示名称的全长。长度不包括零终止。
答案 1 :(得分:0)
ICU是正确的方法,但它比克里斯说的更简单。基金会已经包括ICU,用于各种文本处理功能,包括CFStringTransform()。其transform
参数接受“ICU用户指南中定义的任何有效ICU转换ID”。
ICU's transforms中的一个是Any-Name
:
在花括号中转换字符及其Unicode名称。例如: 。,⇆{FULL STOP} {COMMA}
(语法并没有完全记录,但它足够接近,你可以弄明白。)
还有一个Any-Hex
转换,可用于转换为代码点十六进制值。