红宝石音译
回答
从尝试采取看看this script用于替换字符串中重音字符的TechniConseils。使用示例:
"Gévry".removeaccents #=> Gevry
不适用于UTF-8字符串,至少对我而言。 – lzap
使用UnicodeUtils宝石。这适用于1.9和2.0。 Iconv在这些版本中已被弃用。
gem install unicode_utils
然后在IRB试试这个:
2.0.0p0 :001 > require 'unicode_utils' #=> true
2.0.0p0 :002 > r = "Résumé" #=> "Résumé"
2.0.0p0 :003 > r.encoding #=> #<Encoding:UTF-8>
2.0.0p0 :004 > UnicodeUtils.nfkd(r).gsub(/(\p{Letter})\p{Mark}+/,'\\1')
#=> "Resume"
现在是如何工作的解释!
首先你必须规范NFKD(Normalization Form(K)ompatability Decomposition)格式的字符串。在 “E” 的unicode码点,被称为 “latin small letter e with acute”,可以以两种方式表示:
- E = U + 00E9
- E =(E = U + 0065)+(急性= U + 0301 )
第一种形式是最受欢迎的单一代码点。第二种形式是分解格式,将字形(在屏幕上显示为“é”)分隔为两个基本代码点,ASCII“e”和尖锐的重音符号。 Unicode可以从许多代码点组成一个字形,这在一些亚洲书写系统中很有用。
请注意,您通常希望以标准格式对数据进行规范化处理,以进行比较,排序等操作。在ruby中,这两种格式的“é”不等于()。在IRB,这样做:
> "\u00e9" #=> "é"
> "\u0065\u0301" #=> "é"
> "\u00e9" == "\u0065\u0301" #=> false
> "\u00e9" > "\u0065\u0301" #=> true
> "\u00e9" >= "f" #=> true (composed é > f)
> "\u0065\u0301" > "f" #=> false (decomposed é < f)
> "Résumé".chars.count #=> 6
> decomposed = UnicodeUtils.nfkd("Résumé")
#=> "Résumé"
> decomposed.chars.count #=> 8
> decomposed.length #=> 6
> decomposed.gsub(/(\p{Letter})\p{Mark}+/,'\\1')
#=> "Resume"
现在,我们已经在NFKD格式的字符串,我们可以使用“属性名”语法(\ p {PROPERTY_NAME})来匹配一个字母后跟一个应用正则表达式或更多的变音符号“标记”。通过捕获匹配的字母,我们可以使用gsub替换整个字符串中捕获的字母的字母+变音符号。
该技术从ASCII字母中去除了变音符号,并且不会将诸如希腊语或西里尔字符串等字符集音译为等效的ASCII字母。
+1为分离字母重音,然后删除它们的巧妙方式。 -1没有正常化'我'作为'我' – nurettin
- 1. 声音库的红宝石
- 2. 红宝石散列在红宝石
- 3. 红宝石宝石文档
- 4. 宝石安装红宝石
- 5. 调试宝石红宝石
- 6. 红宝石程序宝石
- 7. 错误红宝石宝石
- 8. Twitter的红宝石宝石
- 9. 卸载红宝石宝石
- 10. 红宝石宝石 - LoadError
- 11. 红宝石宝石LoadError
- 12. 安装红宝石宝石
- 13. Python /红宝石:cronjob将不会加载红宝石宝石?
- 14. 红宝石和重音字符
- 15. 记录声音红宝石,窗户
- 16. 红宝石宝石编译在aix 64位盒上失败
- 17. 在红宝石
- 18. 红宝石
- 19. 在红宝石
- 20. 与红宝石
- 21. 从红宝石
- 22. 红宝石
- 23. 从红宝石
- 24. 红宝石 - LoadError
- 25. 红宝石
- 26. 红宝石
- 27. 红宝石
- 28. 在红宝石
- 29. 红宝石
- 30. 从红宝石
这似乎是我的早期问题的确切副本:http://stackoverflow.com/questions/225471/how-do-i-replace-accented-latin-characters-in-ruby –