小编cha*_*int的帖子

Ruby转换字符串编码从ISO-8859-1到UTF-8不起作用

我正在尝试将字符串从ISO-8859-1编码转换为UTF-8,但我似乎无法使其工作.这是我在irb中所做的一个例子.

irb(main):050:0> string = 'Norrlandsvägen'
=> "Norrlandsvägen"
irb(main):051:0> string.force_encoding('iso-8859-1')
=> "Norrlandsv\xC3\xA4gen"
irb(main):052:0> string = string.encode('utf-8')
=> "Norrlandsvägen" 
Run Code Online (Sandbox Code Playgroud)

我不知道为什么 Norrlandsvägen在ISO-8859-1将被转换成Norrlandsvägen在UTF-8.

我尝试过编码,编码!,编码(destinationEncoding,originalEncoding),iconv,force_encoding,以及我能想到的各种奇怪的解决方法,但似乎没什么用.有人可以帮助我/指出我正确的方向吗?

Ruby新手仍然像疯了一样拉头发,但感谢所有回复... :)

这个问题的背景:我正在编写一个宝石,它将从一些网站下载一个xml文件(将具有iso-8859-1编码)并将其保存在存储中,我想先将其转换为utf-8.但像Norrlandsvägen这样的词语让我感到困惑.真的任何帮助将不胜感激!

[更新]:我意识到在irb控制台中运行这样的测试可能会给我不同的行为,所以这里是我在实际代码中的内容:

def convert_encoding(string, originalEncoding) 
  puts "#{string.encoding}" # ASCII-8BIT
  string.encode(originalEncoding)
  puts "#{string.encoding}" # still ASCII-8BIT
  string.encode!('utf-8')
end
Run Code Online (Sandbox Code Playgroud)

但最后一行给出了以下错误:

Encoding::UndefinedConversionError - "\xC3" from ASCII-8BIT to UTF-8
Run Code Online (Sandbox Code Playgroud)

感谢@Amadan在下面的回答,我注意到\xC3如果你运行,实际上会显示在irb中:

irb(main):001:0> string = 'ä'
=> "ä"
irb(main):002:0> string.force_encoding('iso-8859-1')
=> "\xC3\xA4"
Run Code Online (Sandbox Code Playgroud)

我还尝试为结果分配一个新变量,string.encode(originalEncoding)但得到了一个更奇怪的错误:

newString = string.encode(originalEncoding)
puts "#{newString.encoding}" # can't even get to …
Run Code Online (Sandbox Code Playgroud)

ruby encoding utf-8 character-encoding iconv

8
推荐指数
1
解决办法
9955
查看次数

标签 统计

character-encoding ×1

encoding ×1

iconv ×1

ruby ×1

utf-8 ×1