我有输入数据(通过File.popen),大多数是utf8,但有时其中有iso8859-1字符。我希望所有不是有效utf8序列的内容都解释为iso8859-1,并替换为相应的(两字节)utf-8序列(结果为UTF-8编码的字符串)。
在红宝石中执行此操作的有效方法是什么?这将处理整个git log
输出,因此应该相当快。
答案 0 :(得分:2)
从ruby 2.1.0(afaik)开始,您可以使用scrub
进行这种丑陋的编码工作:
https://ruby-doc.org/core-2.1.0/String.html#method-i-scrub
如果字符串是无效字节序列,则将无效字节替换为 给定替换字符,否则返回self。如果给出了block, 用该块的返回值替换无效字节。
"abc\u3042\x81".scrub #=> "abc\u3042\uFFFD"
"abc\u3042\x81".scrub("*") #=> "abc\u3042*"
"abc\u3042\xE3\x80".scrub{|bytes| '<'+bytes.unpack('H*')[0]+'>' } #=> "abc\u3042<e380>"