Ruby十六进制到包含法语字符的字符串转换

时间:2019-03-20 19:06:35

标签: ruby hex data-conversion french ruby-smpp

这与我用于项目的ruby gem ruby​​-smpp有关。

我有一个字节字符串\u0000\xE0\u0000\xE2\u0000\xE1\u0000\xE8\u0000\xEA\u0000\xE9\u0000\xE7。它以法语接收的消息(即MO或移动设备发起的消息)表示消息的正文。该消息的实际内容为àâáèêéç。只是想知道如何在Ruby中将\u0000\xE0\u0000\xE2\u0000\xE1\u0000\xE8\u0000\xEA\u0000\xE9\u0000\xE7转换为àâáèêéç

我尝试过

["\u0000\xE0\u0000\xE2\u0000\xE1\u0000\xE8\u0000\xEA\u0000\xE9\u0000\xE7"].pack('H*')

=> "\x00\x02\x01\b\n\t\a"

['E0','E2','E1','E8', 'EA', 'E9', 'E7'].pack('H*')
=> "\xE0"

都错了。

谢谢!

1 个答案:

答案 0 :(得分:4)

看起来您的字符串是UTF-16BE编码的:

str = "\u0000\xE0\u0000\xE2\u0000\xE1\u0000\xE8\u0000\xEA\u0000\xE9\u0000\xE7"

str.encode('UTF-8', 'UTF-16BE')
#=> "àâáèêéç"