我有字符串"V\355ctor"
(我认为是Víctor
)。
有没有办法将其转换为ASCII,í
将被ASCII i
取代?
我已经尝试过Iconv但没有成功。
(我只得到Iconv::IllegalSequence: "\355ctor"
)
此外,Ruby 1.8.7和Ruby 2.0之间是否存在差异?
编辑:
Iconv.iconv('UTF-8//IGNORE', 'UTF-8', "V\355ctor")
这似乎有效,但结果是Vctor
而非Victor
答案 0 :(得分:5)
我知道两种选择。
transliterate
。
$ irb
1.9.3-p448 :001 > string = "Víctor"
=> "Víctor"
1.9.3-p448 :002 > require 'i18n'
=> true
1.9.3-p448 :003 > I18n.transliterate(string)
=> "Victor"
来自stringex gem。
的UnidecoderStringex::Unidecoder..decode(string)
<强>更新强>
在“V \ 355ctor”上运行Unidecoder时,会出现以下错误:
Encoding::CompatibilityError: incompatible encoding regexp match (UTF-8 regexp with IBM437 string)
嗯,也许你想先从IBM437翻译:
string.force_encoding('IBM437').encode('UTF-8')
这可以帮助您进一步发展。请注意,自动检测的编码可能不正确,如果您确切知道编码是什么,它会使一切变得更容易。
答案 1 :(得分:3)
您要做的是transliteration。
最常用且维护得最好的库是ICU。 (Iconv也经常使用,但它有许多限制,例如你遇到的那个。)
粗略的Google search会产生一些红宝石ICU包装。我担心我无法评论哪一个更好,因为我承认从未使用过任何一个。但那就是你想要使用的那种东西。