gpt4 book ai didi

ruby - 将字符串(表示 UTF-8 十六进制)转换为字符串

转载 作者:太空宇宙 更新时间:2023-11-03 17:22:26 24 4
gpt4 key购买 nike

我有一个像这样的 UTF-8 十六进制字符串:

s = "0059006F007500720020006300720065006400690074002000680061007300200067006F006E0065002000620065006C006F00770020003500200064006F006C006C006100720073002E00200049006600200079006F00750020006800610076006500200061006E0020004100640064002D004F006E0020006F007200200042006F006E0075007300200079006F007500720020007200650073006F00750072006300650073002000770069006C006C00200077006F0072006B00200075006E00740069006C0020006500780068006100750073007400650064002E00200054006F00200074006F00700020007500700020006E006F007700200076006900730069007400200076006F006400610066006F006E0065002E0063006F002E006E007A002F0074006F007000750070"

我想将其转换为实际的 UTF-8 字符串。它应该是:

Your credit has gone below 5 dollars. If you have an Add-On or Bonus your resources will work until exhausted. To top up now visit vodafone.co.nz/topup

这个有效:

s.scan(/.{4}/).map { |a| [a.hex].pack('U') }.join

但我想知道是否有更好的方法来做到这一点:我是否应该使用 Encoding#convert .

最佳答案

额外的 00 表明该字符串实际上是 UTF-16 的十六进制表示形式字符串,而不是 UTF-8。假设是这种情况,您需要执行的步骤来获取 UTF-8 字符串首先将字符串转换为十六进制数字表示的实际字节( Array#pack 可用于此),然后将其标记为在使用 force_encoding 进行适当编码(看起来像 UTF-16BE)最后使用 encode将其转换为 UTF-8:

[s].pack('H*').force_encoding('utf-16be').encode('utf-8')

关于ruby - 将字符串(表示 UTF-8 十六进制)转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29861982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com