将UTF-8字符转换为正确的ASCII字符

Ben*_*t B 2 ruby ascii

我有字符串"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

Mar*_*mas 5

我知道有两种选择.

  1. transliterate来自I18n宝石.

    $ 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"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 来自stringex宝石的 Unidecoder .

    Stringex::Unidecoder..decode(string)
    
    Run Code Online (Sandbox Code Playgroud)

更新:

在"V\355ctor"上运行Unidecoder时,会出现以下错误:

Encoding::CompatibilityError: incompatible encoding regexp match (UTF-8 regexp with IBM437 string)
Run Code Online (Sandbox Code Playgroud)

嗯,也许你想先从IBM437翻译:

string.force_encoding('IBM437').encode('UTF-8')
Run Code Online (Sandbox Code Playgroud)

这可以帮助您进一步发展.请注意,自动检测的编码可能不正确,如果您确切知道编码是什么,它会使一切变得更加容易.