我正在处理来自this website和windows-1252
字符集的文字。使用force_encoding
将文本转换为UTF-8,但文本仍然包含我无法摆脱的空格。无法使用text.gsub!(/\s/, ' ')
或类似技术删除空格。
iconv宝石也不能解决问题 - 正如here所解释的那样。很明显,如果我没有将编码指定为UTF-8,则空格是原始文本和windows-1252
字符集的残余,因为我得到invalid multibyte char (US-ASCII)
警告。
我不是文本编码的专家,所以我可能会忽视一些微不足道的事情。
更新:这是我目前使用的脚本。
#!/bin/env ruby
# encoding: utf-8
require 'rubygems'
require 'nokogiri'
require 'open-uri'
URL = 'http://www.eximsystems.com/LaVerdad/Antiguo/Gn/Genesis.htm'
html = Nokogiri.HTML(open(URL))
# Extract Paragraphs
text = ''
html.css('p').each do |p|
text += p.text
end
# Clean Up Text
text.gsub!(/\s+/, ' ')
puts text
这是包含我尝试删除的不可见字符的文本示例。数字 16 之前的空格就是我所说的。
cobraron aliento para conversarconél。 16 Alpuntócorriólavoz,y seindulgógeneralmenteesta noticia en el palacio del rey:Han
答案 0 :(得分:3)
如果没有看到您的代码,很难确切地知道您发生了什么。但是,我会指出String#force_encoding不会对字符串进行转码;这是一种说法,“不,真的,这是UTF-8”,例如。要从一种编码转码到另一种编码,请使用String#encode。
这似乎对我有用:
require 'net/http'
s = Net::HTTP.get('www.eximsystems.com', '/LaVerdad/Antiguo/Gn/Genesis.htm')
s.force_encoding('windows-1252')
s.encode!('utf-8')
通常,/[[:space:]]/
应该捕获更多种类/\s/
(相当于/[ \t\r\n\f]/
)的空白,但在这种情况下似乎没有必要。此时我在s
找不到任何异常的空白。如果您仍然遇到问题,则需要发布代码并更准确地说明问题。
更新:感谢您使用代码更新问题并提供问题示例。看起来问题是不间断的空间。我认为从源头上摆脱它们是最简单的:
require 'nokogiri'
require 'open-uri'
URL = 'http://www.eximsystems.com/LaVerdad/Antiguo/Gn/Genesis.htm'
s = open(URL).read # Separate these three lines to convert
s.gsub!(' ', ' ') # to normal ' ' in source rather than after
html = Nokogiri.HTML(s) # conversion to unicode non-breaking space
# Extract Paragraphs
text = ''
html.css('p').each do |p|
text += p.text
end
# Clean Up Text
text.gsub!(/\s+/, ' ')
puts text
现在只有一个正常的空间,在15月末和16号之间:
15)BesótambiénJoséatodos sus hermanos,orando sobre cada uno de ellos; despuésdecuyas demostraciones cobraron aliento para conversarconél。 16 Alpuntócorriólavoz,ysedivulgógeneralmenteesta noticia en el palacio del rey:Han venido los hermanosdeJosé; yorgósedeelloFaraónytoda su corte。
答案 1 :(得分:0)
您可以尝试使用text.strip删除空格。