如何使用 Ruby 解码 IFC
How to decoding IFC using Ruby
在 Ruby 中,我正在读取 .ifc 文件以获取一些信息,但我无法对其进行解码。例如文件内容:
"'S\X2[=11=]E9\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")'
但没有什么能满足我的需求。
我对 IFC 一无所知,但仅基于 Denis 链接到的页面和您输入的示例,这是有效的:
ESCAPE_SEQUENCE_EXPR = /\X2\(.*?)\X0\/
def decode_ifc(str)
str.gsub(ESCAPE_SEQUENCE_EXPR) do
.gsub(/..../) { $&.to_i(16).chr(Encoding::UTF_8) }
end
end
str = 'S\X2[=10=]E9\X0\jour/Cuisine'
puts "Input:", str
puts "Output:", decode_ifc(str)
这段代码所做的就是用相应的 Unicode 字符替换分隔符之间的每个四个字符序列 (/..../
),每个字符都是十六进制的 Unicode 代码点。
请注意,此代码仅处理此特定编码。快速浏览 implementation guide 会显示其他编码,包括用于基本多语言平面之外的 Unicode 字符的 \X4
指令。不过,这应该可以帮助您入门。
在 eval.in 上查看:https://eval.in/776980
在 Ruby 中,我正在读取 .ifc 文件以获取一些信息,但我无法对其进行解码。例如文件内容:
"'S\X2[=11=]E9\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")'
但没有什么能满足我的需求。
我对 IFC 一无所知,但仅基于 Denis 链接到的页面和您输入的示例,这是有效的:
ESCAPE_SEQUENCE_EXPR = /\X2\(.*?)\X0\/
def decode_ifc(str)
str.gsub(ESCAPE_SEQUENCE_EXPR) do
.gsub(/..../) { $&.to_i(16).chr(Encoding::UTF_8) }
end
end
str = 'S\X2[=10=]E9\X0\jour/Cuisine'
puts "Input:", str
puts "Output:", decode_ifc(str)
这段代码所做的就是用相应的 Unicode 字符替换分隔符之间的每个四个字符序列 (/..../
),每个字符都是十六进制的 Unicode 代码点。
请注意,此代码仅处理此特定编码。快速浏览 implementation guide 会显示其他编码,包括用于基本多语言平面之外的 Unicode 字符的 \X4
指令。不过,这应该可以帮助您入门。
在 eval.in 上查看:https://eval.in/776980