【问题标题】:Convert unicode mess to correct characters in Ruby?将 unicode 混乱转换为 Ruby 中的正确字符?
【发布时间】:2013-06-11 11:06:41
【问题描述】:

我有一个字符串,例如:

"MÃ\u0083¼LLER".encoding
#<Encoding:UTF-8>   

"MÃ\u0083¼LLER".inspect    
"\"MÃ\\u0083¼LLER\""  

我能做些什么来挽救这样的字符串?考虑到我没有原始数据。这可以挽救吗?

【问题讨论】:

  • 应该是什么?你能告诉我们"....".inspect吗?
  • 您好,感谢您的关注。正如我所说,我没有原始数据,所以不知道。这是我的问题,我希望有一个解决方案。我拥有的关于原始数据的唯一信息是它是 php 序列化对象的一部分。
  • 但它会帮助查看字符串的十六进制表示
  • inspect 生成相同的字符串,但添加了反斜杠。
  • 是的反斜杠和十六进制代码,用于非 ascii 字节

标签: ruby encoding


【解决方案1】:

看起来该字符串已从 utf-8 转换为 latin-1 两次。在你的一些数据上试试这个,让我知道它是否有效:

require 'iconv'

def decode(str)
  i = Iconv.new('LATIN1','UTF-8')
  i.iconv(i.iconv(str)).force_encoding('UTF-8')
end

decode("MÃ\u0083¼LLER")
#=> "MüLLER"

【讨论】:

  • +1 你以大约 5 秒的优势击败了我。 :-D 另请参阅 python 的相关问题:stackoverflow.com/questions/4267019/…
  • 你对第二个字符串"MA\u008EEIKIAI" 有什么建议吗?它产生:Iconv::IllegalSequence: "\x8EEIKIAI"
  • 是的。不确定这是好事还是坏事。处理这些数据一直非常痛苦,我完全迷失到了绝望的地步。我什至从哪里开始寻找这个烂摊子?
  • 通过在没有代码的情况下搜索谷歌发现第二个字符串应该是Mažeikiai。所以,本质上,我需要将\u008E 转换为Ž
  • 我认为您的数据包含不同编码的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 2013-01-30
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 2011-10-22
相关资源
最近更新 更多