字符编码转换

时间:2013-01-30 13:34:56

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个包含瑞典字符的字符串,并希望将其转换为基本英语。

name = "LänödmåtnÖng ÅjädårbÄn" 

这些字符应按如下方式转换:

  • Å使用A
  • å使用a
  • Ä使用A
  • ä使用a
  • Ö使用O
  • ö使用o

有一种简单的方法吗?如果我尝试:

ascii_to_string = name.unpack("U*").map{|s|s.chr}.join

它返回L\xE4n\xF6dm\xE5tn\xD6ng \xC5j\xE4d\xE5rb\xC4n作为ASCII,但我想将其转换为英语。

3 个答案:

答案 0 :(得分:3)

使用OP的转换表作为tr方法的输入:

#encoding: utf-8
name = "LänödmåtnÖng ÅjädårbÄn" 
p name.tr("ÅåÄäÖö", "AaAaOo") #=> "LanodmatnOng AjadarbAn"

答案 1 :(得分:1)

试试这个:

string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.to_s

this post.

中找到

答案 2 :(得分:1)

你已经得到了不错的答案,但有一种方法更容易记住(没有神奇的正则表达式):

name.parameterize

它将空格更改为短划线,因此您需要以某种方式处理它,例如通过单独处理每个单词:

name.split.map { |s| s.parameterize }.join ' '