我正在运行Ruby 1.9.2并尝试修复一些破坏的UTF-8文本输入,其中文本字面意义"\\354\\203\\201\\355\\221\\234\\353\\252\\205"并将其更改为正确的韩语"???"
然而,经过一段时间的搜索和尝试一些方法,我仍然得到胡言乱语.令人困惑的是,第3行的转义字符示例工作正常
# encoding: utf-8
puts "???" # Target string
# Output: "???"
puts "\354\203\201\355\221\234\353\252\205" # Works with escaped characters like this
# Output: "???"
# Real input is a string
input = "\\354\\203\\201\\355\\221\\234\\353\\252\\205"
# After some manipulation got it into an array of numbers
puts [354, 203,201,355,221,234,353,252,205].pack('U*').force_encoding('UTF-8')
# Output: ?ËÉ?ÝêšüÍ (gibberish)
Run Code Online (Sandbox Code Playgroud)
我确信这肯定已经在某个地方得到了回答,但我还没有找到它.
mu *_*ort 10
这是您想要获取UTF-8韩语文本的目的:
s = "\\354\\203\\201\\355\\221\\234\\353\\252\\205"
k = s.scan(/\d+/).map { |n| n.to_i(8) }.pack("C*").force_encoding('utf-8')
# "???"
Run Code Online (Sandbox Code Playgroud)
这就是它的工作原理:
scan用来提取单个数字.map与to_i(8)到转换八进制值(如由亨宁Makholm说明)为整数.pack('C*')获取字节字符串.该字符串将具有BINARY编码(AKA ASCII-8BIT).force_encoding('utf-8').你缺少的主要是你的pack格式; 'U'意味着"UTF-8字符",并期望一个Unicode代码点数组,每个代码点由一个整数表示,'C'需要一个字节数组,这就是我们所拥有的.
| 归档时间: |
|
| 查看次数: |
1831 次 |
| 最近记录: |