在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")'
但没有什么能满足我的需要。
答案 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