如何使用Ruby解码IFC

时间:2017-04-14 18:46:38

标签: ruby encoding ifc

在Ruby中,我正在读取.ifc文件以获取一些信息,但我无法对其进行解码。例如,文件内容:

"'S\X2\00E9\X0\jour/Cuisine'"

应该是:

"'Séjour/Cuisine'"

我正在尝试用以下代码对其进行编码:

  • puts ifcFileLine.encode("Windows-1252")
  • puts ifcFileLine.encode("ISO-8859-1")
  • puts ifcFileLine.encode("ISO-8859-5")
  • puts ifcFileLine.encode("iso-8859-1").force_encoding("utf-8")'

但没有什么能满足我的需要。

1 个答案:

答案 0 :(得分:2)

我对IFC一无所知,但完全基于Denis链接的页面和您的示例输入,这有效:

ESCAPE_SEQUENCE_EXPR = /\\X2\\(.*?)\\X0\\/

def decode_ifc(str)
  str.gsub(ESCAPE_SEQUENCE_EXPR) do
    $1.gsub(/..../) { $&.to_i(16).chr(Encoding::UTF_8) }    
  end
end

str = 'S\X2\00E9\X0\jour/Cuisine'
puts "Input:", str
puts "Output:", decode_ifc(str)

所有这些代码都替换了分隔符之间的每个四个字符序列(/..../),每个分隔符都是十六进制的Unicode代码点,并带有相应的Unicode字符。

请注意,此代码仅处理此特定编码。快速浏览implementation guide可以看到其他编码,包括基本多语言平面之外的Unicode字符的\X4指令。不过,这应该让你开始。

在eval.in上查看:https://eval.in/776980