如何在Ruby中将UTF-16LE字符的字节数组正确转换为utf-8字符串

时间:2017-02-18 00:51:38

标签: ruby

我有一个Base64编码的数据包捕获二进制文件。 我想在捕获的某个位置提取子字符串。

我在Ruby中这样做:

payload_decoded = Base64.decode64(payload)
file_size = payload_decoded[114..115].unpack('S*')[0]
file_fullpath = payload_decoded[124, file_size]
p file_fullpath

这在某种程度上有效。 file_size获取一个具有我想要提取的长度的整数。然后我可以提取字节数组的正确切片。如果我只是在我的Mac终端上测试它,它会完美地显示字符串。

但是,在CentOS7中运行的应用程序本身的代码中,所有字符都以00字节为后缀显示(例如T显示为T \ x00)。我想我可以从字符串中删除它,但是想避免这种情况。处理这个问题最正确的方法是什么?

TIA

1 个答案:

答案 0 :(得分:1)

这似乎得到了预期的结果:

file_fullpath = file_fullpath.force_encoding('UTF-16LE').encode!('UTF-8')

似乎我首先需要“说服”Ruby,该字符串是UTF-16LE,然后才转换为UTF-8。