require 'iconv'
text = "这里有中文、English、日本語混合的文本"
chinese_words = []
regex = /[\u4e00-\u9fff]+/u
text.scan(regex) do |match|
converter = Iconv.new('GB2312//IGNORE', 'UTF-8')
chinese_words << converter.iconv(match).first
converter.close
end
puts chinese_words
处理不同编码下的字符匹配问题
- UTF - 8编码:在Ruby中,默认字符串编码是UTF - 8,所以对于UTF - 8编码的文本可以直接处理。在正则表达式中,使用
/[\u4e00-\u9fff]+/u
,这里的u
修饰符表示该正则表达式采用UTF - 8编码,[\u4e00-\u9fff]
匹配中文字符的Unicode范围。
- GB2312编码转换:通过
Iconv
库来实现从UTF - 8到GB2312的编码转换。Iconv.new('GB2312//IGNORE', 'UTF-8')
创建一个编码转换器,//IGNORE
表示在转换过程中忽略无法转换的字符,避免转换错误。在处理每一个匹配到的中文字符串时,使用converter.iconv(match).first
进行转换,并将结果添加到数组中,最后关闭转换器以释放资源。