正如我们所知,我们可以Iconv在 Ruby 1.9.3 中使用TRANSLITflag,它将用 ASCII 等效项替换重音字符,前提是它们不存在于目标编码中。
使用示例:
\n\nrequire \'iconv\'\nz = "H\xc3\xa5kan"\nIconv.conv("windows-1250//TRANSLIT", "UTF-8", z) \n# => outputs "Hakan" (with diactric removed)\npl = "za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87"\nIconv.conv("windows-1250//TRANSLIT", "UTF-8", pl)\n# => outputs "za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87" (because windows-1250 contains all this characters)\n# well, to be honest it outputs "za\\xBF\\xF3\\xB3\\xE6" because of terminal settings\n# but I hope you understand\nRun Code Online (Sandbox Code Playgroud)\n\n但是Iconv已被弃用,建议使用String#encode。
然而使用时#encode出现问题:
z.encode(\'windows-1250\', \'utf-8\')\nEncoding::UndefinedConversionError: U+00E5 to WINDOWS-1250 in conversion from UTF-8 to WINDOWS-1250\nRun Code Online (Sandbox Code Playgroud)\n\n有没有办法获得与iconv TRANSLIT使用标志类似的行为String#encodeRuby 2+ 中
ste*_*lag -1
如果您知道会发生什么,那么您可以在散列中指定替换:
\n\nz = "H\xc3\xa5kan"\np z.encode(\'windows-1250\', \'utf-8\', fallback: {"\xc3\xa5"=>"a"}) # => Hakan\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |