MST

星途 面试题库

面试题:Ruby字符串处理中的正则表达式与编码结合应用

给定一个包含多种语言(如中文、英文、日文等)混合且编码为UTF - 8的文本字符串,要求使用正则表达式提取出所有的中文词汇,并将其转换为GB2312编码后存储到一个数组中。请写出完整的Ruby代码实现,并说明在处理过程中如何处理不同编码下的字符匹配问题。
41.6万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
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

处理不同编码下的字符匹配问题

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