红宝石:主要修复-utf8字符串

时间:2018-11-29 05:53:47

标签: ruby utf-8

我有输入数据(通过File.popen),大多数是utf8,但有时其中有iso8859-1字符。我希望所有不是有效utf8序列的内容都解释为iso8859-1,并替换为相应的(两字节)utf-8序列(结果为UTF-8编码的字符串)。

在红宝石中执行此操作的有效方法是什么?这将处理整个git log输出,因此应该相当快。

1 个答案:

答案 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>"