ruby - 涉及法语字符的 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"
两者都是错误的。
提前致谢!
解决方案
看起来您的字符串是 UTF-16BE 编码的:
str = "\u0000\xE0\u0000\xE2\u0000\xE1\u0000\xE8\u0000\xEA\u0000\xE9\u0000\xE7"
str.encode('UTF-8', 'UTF-16BE')
#=> "àâáèêéç"
推荐阅读
- android - JobScheduler 空闲和周期性行为
- javascript - 录音机不工作recorder.js Flask,请提供任何建议
- r - 在不同的列中同时将 NA 变为 0,但不是在 R 中全部变为 0
- java - 我们可以初始化一个大小为 1447891223 的字符串数组吗?
- azure - QnAmaker 没有列出我的知识库,甚至不允许我创建一个新知识库
- c# - C# 使用 JSON 进行序列化
- javascript - 用 Jquery 在 camelCase 中放入一个 html 属性
- python - 如何在python中将参数传递给函数
- angular - 即使正确调用了服务,我的订阅似乎也无法在组件上正确完成
- python - 我如何删除我已经打印的内容,所以我想在几秒钟内向用户显示答案并删除它