如何用ruby 1.8.7中的各自字符替换非ascii字符

时间:2016-09-27 13:58:23

标签: ascii non-ascii-characters iconv ruby-1.8.7

我使用iconv替换字符:

<%= Iconv.iconv("ascii//translit", "utf-8", "ENDÜœSTRIYEL").to_s %>

显示,    END?oeSTRIYEL

而在irb中,它显示如下:

irb(main):006:0> Iconv.iconv('ascii//translit', 'utf-8', 'ENDÜœSTRIYEL').to_s
=> "ENDUoeSTRIYEL"

如何在irb中完整翻译nonascii字符?

感谢。

1 个答案:

答案 0 :(得分:0)

glibc的iconv工具具有取决于语言环境的音译:

$ echo "ENDÜœSTRIYEL" | LC_ALL=C iconv -f utf-8 -t ascii//translit
END?oeSTRIYEL
$ echo "ENDÜœSTRIYEL" | LC_ALL=de_DE.UTF-8 iconv -f utf-8 -t ascii//translit
ENDUEoeSTRIYEL
$ echo "ENDÜœSTRIYEL" | LC_ALL=ja_JP.UTF-8 iconv -f utf-8 -t ascii//translit
ENDUoeSTRIYEL

如您所见,三种不同的语言环境有三种不同的结果。

如果您要托管的服务器旨在处理来自不同国家/地区的用户的输入,您有两种选择:

  • 为所有用户使用单一语言环境,并希望它对所有用户都足够好。
  • 为每次转化暂时切换区域设置(使用uselocale,而不是setlocale)。但是,我不知道Ruby中是否有uselocale