2011-10-20 25 views
1

總的Ruby noob,只是試圖破解一個腳本,使其工作。使用Iconv從UTF-8轉換爲latin1的錯誤

irb(main):011:0> Iconv.iconv("LATIN1//IGNORE", "UTF-8", "Résumé") 
Iconv::InvalidCharacter: "\351" 
    from (irb):11:in `iconv' 
    from (irb):11 
    from :0 
irb(main):012:0> Iconv.iconv("LATIN1//TRANSLIT//IGNORE", "UTF-8", "Résumé") 
Iconv::IllegalSequence: "\351sum\351" 
    from (irb):12:in `iconv' 
    from (irb):12 
    from :0 
irb(main):002:0> "Résumé".encoding 
NoMethodError: undefined method `encoding' for "R\351sum\351":String 
    from (irb):2 

回答

1

由於它已將輸入字符串解釋爲LATIN1,因此無法將其轉換爲該路徑。您可能需要將您的編碼設置爲UTF-8才能啓動。 \351是LATIN1 é的字符。

你想要的結果如下:

"Résumé".encoding 
# => #<Encoding:UTF-8> 

你可以檢查你的LANG環境變量,或者無論你的平臺使用,以確定默認的字符編碼。

+0

感謝您的幫助。這是我得到的:irb(main):002:0>「Résumé」.encoding NoMethodError:未定義的方法編碼爲「R \ 351sum \ 351」:字符串 from(irb):2 –

+0

看起來像你'然後重新使用Ruby 1.8.x。它主要對字符編碼無知,因此它將受制於您使用的任何終端或命令提示符。你可以通過使用''Résumé'.unpack(「C *」)'來檢查字符串中的內容,檢查原始字節,你應該看到'[82,195,169,115,117,109,195,169] '如果你處於UTF-8模式,或者'[82,233,115,117,109,233]'在LATIN1中。 – tadman