【问题标题】:Delete non-UTF characters from a string in Ruby?从Ruby中的字符串中删除非UTF字符?
【发布时间】:2012-08-22 06:19:58
【问题描述】:

如何从 ruby​​ 字符串中删除非 UTF8 字符?我有一个字符串,其中包含例如“xC2”。我想从字符串中删除该字符,使其成为有效的 UTF8。

这个:

text.gsub!(/\xC2/, '')

返回错误:

incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)

我也在查看 text.unpack('U*') 和 string.pack,但没有得到任何结果。

【问题讨论】:

标签: ruby regex string


【解决方案1】:

您可以为此使用编码。 text.encode('UTF-8', :invalid => :replace, :undef => :replace)

更多信息请查看Ruby-Docs

【讨论】:

  • 每次你看到你从这个答案中得到 10 分,你一定知道你刚刚救了一个人多少头撞在桌子上。
  • 是的。在这里,再给你 10 分。
【解决方案2】:

你可以这样做

# encoding: utf-8

class String
  def validate_encoding
    chars.select(&:valid_encoding?).join 
  end
end

puts "testing\xC2 a non UTF-8 string".validate_encoding
#=>testing a non UTF-8 string

【讨论】:

  • .select(&:valid_encoding?) 而不是 .collect{} 要短得多。
  • 你说得对,它很容易理解,谢谢,我调整了我的答案
  • 这确实有效,与投票最多的答案不同。
【解决方案3】:

你可以使用/n,如

text.gsub!(/\xC2/n, '')

强制正则表达式对字节进行操作。

你确定这是你想要的吗? [U+80, U+BF] 范围内的任何 Unicode 字符都将具有 UTF-8 编码形式的\xC2

【讨论】:

  • 这给了我incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)
【解决方案4】:

试试 Iconv

1.9.3p194 :001 > require 'iconv'
# => true 
1.9.3p194 :002 > string = "testing\xC2 a non UTF-8 string"
# => "testing\xC2 a non UTF-8 string" 
1.9.3p194 :003 > ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
# => #<Iconv:0x000000026c9290> 
1.9.3p194 :004 > ic.iconv string
# => "testing a non UTF-8 string" 

【讨论】:

  • 注意:Iconv 已(将)从 Rails 3.2 中弃用,取而代之的是 String#encode
【解决方案5】:

你的文本有 ASCII-8BIT 编码,你应该使用这个:

String.delete!("^\u{0000}-\u{007F}"); 

它会达到同样的目的。

【讨论】:

    【解决方案6】:

    我发现这个问题的最佳解决方案是同一问题的答案:https://stackoverflow.com/a/8711118/363293

    简而言之:"€foo\xA0".chars.select(&amp;:valid_encoding?).join

    【讨论】:

      【解决方案7】:
      data = '' if not (data.force_encoding("UTF-8").valid_encoding?)
      

      【讨论】:

        猜你喜欢
        • 2018-01-05
        • 2018-01-23
        • 1970-01-01
        • 2014-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-13
        • 2013-06-24
        相关资源
        最近更新 更多