使用代码点返回Unicode名称

时间:2014-08-17 03:06:25

标签: objective-c macos cocoa unicode

我知道如何从代码点返回Unicode字符。那不是我之后的事。我想知道的是如何返回与特定代码点关联的名称。例如,代码点为1F340。它的名字是FOUR LEAF CLOVER。我们可以用它的代码点返回这个名字吗?我已经阅读了大约100个涉及Unicode的主题。但我还没有看到一个人在讨论我的问题。我希望这是可能的。

感谢您的帮助。

2 个答案:

答案 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转换,可用于转换为代码点十六进制值。