Alx*_*lxH 13 unicode encoding r latin unicode-normalization
在Unicode中,带有重音的字母可以用两种方式表示:强调字母本身,以及裸字母加上重音的组合.例如,é(+ U00E9)和e'(+ U0065 + U0301)通常以相同的方式显示.
R呈现以下内容(版本3.0.2,Mac OS 10.7.5):
> "\u00e9"
[1] "é"
> "\u0065\u0301"
[1] "é"
Run Code Online (Sandbox Code Playgroud)
但是,当然:
> "\u00e9" == "\u0065\u0301"
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
R中是否有一个将两个unicode字符转换成单字符形式的函数?在这里特别地,它会坍塌"\u0065\u0301"
成"\u00e9"
.
这对处理大量字符串非常方便.另外,单字符表单可以很容易地转换为其他编码iconv
- 至少对于通常的Latin1字符 - 并且更好地处理plot
.
非常感谢提前.
Alx*_*lxH 12
好吧,似乎已经开发了一个包来增强和简化R中的字符串操作工具箱(最后!).它被称为stringi,看起来非常有前景.它的文档编写得非常好,特别是我发现有关编码和语言环境的页面比关于该主题的一些标准R文档更具启发性.
它有Unicode规范化功能,正如我所寻找的(这里是C形式):
> stri_trans_nfc('\u00e9') == stri_trans_nfc('\u0065\u0301')
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
它还包含一个智能比较功能,它集成了这些规范化问题,减轻了必须考虑它们的痛苦:
> stri_compare('\u00e9', '\u0065\u0301')
[1] 0
# i.e. equal ;
# otherwise it returns 1 or -1, i.e. greater or lesser, in the alphabetic order.
Run Code Online (Sandbox Code Playgroud)
感谢开发人员MarekGągolewski和Bartek Tartanus以及Kurt Hornik的信息!
归档时间: |
|
查看次数: |
1704 次 |
最近记录: |