首页 > 解决方案 > 涉及法语字符的 Ruby 十六进制到字符串转换

问题描述

这与我在项目中使用的 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"

两者都是错误的。

提前致谢!

标签: rubyhexdata-conversionfrenchruby-smpp

解决方案


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

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

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

推荐阅读