如何从一个拼音字符串中删除非UTF8字符?我有一个字符串,例如包含"xC2"。我想从字符串中删除该字符,使其成为一个有效的UTF8。这一点:
text = x = "foo\xC2bar" text.gsub!(/\xC2/, '')
返回错误:
incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)
我也在查看text.unpack('U *')和string.pack,但没有任何结果。
1wnzp6jl1#
您可以使用encode进行编码。text.encode('UTF-8', :invalid => :replace, :undef => :replace)或者text.scrub要了解更多信息,请查看Ruby-Docs,默认情况下将其替换为问号框。
text.encode('UTF-8', :invalid => :replace, :undef => :replace)
text.scrub
sxissh062#
你可以这样做
# 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
egdjgwm83#
您的文本有ASCII-8BIT编码,而不是你应该使用这个:
String.delete!("^\u{0000}-\u{007F}");
它将达到同样的目的。
x9ybnkn64#
可以使用/n,如下所示
/n
text.gsub!(/\xC2/n, '')
来强制Regexp对字节进行操作。你确定这是你想要的吗?在[U+80,U+BF]范围内的任何Unicode字符都将有一个UTF-8编码形式的\xC2。
\xC2
zpf6vheq5#
试试图标
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"
c6ubokkw6#
我发现这个问题的最佳解决方案是对同一个问题的回答:https://stackoverflow.com/a/8711118/363293.简而言之:"€foo\xA0".chars.select(&:valid_encoding?).join
"€foo\xA0".chars.select(&:valid_encoding?).join
ccrfmcuu7#
data = '' if not (data.force_encoding("UTF-8").valid_encoding?)
7条答案
按热度按时间1wnzp6jl1#
您可以使用encode进行编码。
text.encode('UTF-8', :invalid => :replace, :undef => :replace)
或者
text.scrub
要了解更多信息,请查看Ruby-Docs,默认情况下将其替换为问号框。
sxissh062#
你可以这样做
egdjgwm83#
您的文本有ASCII-8BIT编码,而不是你应该使用这个:
它将达到同样的目的。
x9ybnkn64#
可以使用
/n
,如下所示来强制Regexp对字节进行操作。
你确定这是你想要的吗?在[U+80,U+BF]范围内的任何Unicode字符都将有一个UTF-8编码形式的
\xC2
。zpf6vheq5#
试试图标
c6ubokkw6#
我发现这个问题的最佳解决方案是对同一个问题的回答:https://stackoverflow.com/a/8711118/363293.
简而言之:
"€foo\xA0".chars.select(&:valid_encoding?).join
ccrfmcuu7#