Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将UTF-8空格更改为可正则表达式的空格_Ruby_Regex_Encoding_Utf 8 - Fatal编程技术网

Ruby 将UTF-8空格更改为可正则表达式的空格

Ruby 将UTF-8空格更改为可正则表达式的空格,ruby,regex,encoding,utf-8,Ruby,Regex,Encoding,Utf 8,我有以下代码,可以用Nokogiri解析HTML文档: td.next_element.text.scan(/\A[^(]+/).first.gsub(/\s+/, " ").strip 还有一个带有正则表达式的case语句,该正则表达式具有\s+,并且没有捕获任何内容。我试图使用strip,但它什么也没用 在使用上面的gsub行进行测试后,我发现空格的编码方式存在问题td.next_element.text[-2].ord返回的不是我预期的32,而是160。我意识到我的文档是UTF-8而不是

我有以下代码,可以用Nokogiri解析HTML文档:

td.next_element.text.scan(/\A[^(]+/).first.gsub(/\s+/, " ").strip
还有一个带有正则表达式的
case
语句,该正则表达式具有
\s+
,并且没有捕获任何内容。我试图使用
strip
,但它什么也没用

在使用上面的
gsub
行进行测试后,我发现空格的编码方式存在问题
td.next_element.text[-2].ord
返回的不是我预期的32,而是160。我意识到我的文档是UTF-8而不是ASCII,160是一个不间断的空格

我想我应该能做到这一点:

case td.text.strip.downcase.gsub(/\xA0|\xC2/, ' ')
问题是,我明白了

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

我该怎么办?另外,正则表达式不是应该匹配所有空格,而不仅仅是ASCII吗?

添加注释
#encoding:UTF-8
作为脚本的第一行;使用
/[:space:][]/
查找Unicode空格。

添加注释
#编码:UTF-8
作为脚本的第一行;使用
/[:space:][]/
查找Unicode空白。

您需要做的是设置输入数据的字符编码。我不是一个Ruby程序员,所以我不知道具体细节,但是应该有一些库来实现这一点。我确实找到了一篇相关文章:您需要做的是设置输入数据的字符编码。我不是一个Ruby程序员,所以我不知道具体细节,但是应该有一些库来实现这一点。我确实找到了一篇相关文章: