我在ruby(file.rb)中解析xml文件,但即使我用UTF-8或" ISO-8859-1&#编码字符串,我的输出也无法正常工作34 ;.任何线索或我可以设置我的编码? gist
require 'test/unit'
require 'nokogiri'
class MyTest < Test::Unit::TestCase
def test_sentence
doc = Nokogiri::Slop <<-EOXML
<?xml version='1.0' encoding='utf-8'?>
<codeBook version="1.2.2" ID="klm-456-30">
<var ID="V604" name="FHP_V145" wgt-var="K2" files="F1" dcml="0"
intrvl="discrete">
<qstn>
<qstnLit>Dans quelle mesure cette aide vous a-t-elle
été utile? Était-elle
:</qstnLit>
</qstn>
</var>
<qstn>
</codeBook>
EOXML
sentence = doc.children.css("[name=FHP_V145]").children.search("qstnLit").first.text.force_encoding("UTF-8").split("\n")
sentence = sentence.map {|n| n.split.join(" ") }
sentence = sentence.join(" ")
puts sentence
assert_equal(sentence, "Dans quelle mesure cette aide vous a-t-elle été utile? Était-elle :")
end
end
答案 0 :(得分:1)
XML似乎已损坏。字符实体应指定如下。
require 'test/unit'
require 'nokogiri'
class MyTest < Test::Unit::TestCase
def test_sentence
doc = Nokogiri::Slop <<-EOXML
<?xml version='1.0' encoding='utf-8'?>
<codeBook version="1.2.2" ID="klm-456-30">
<var ID="V604" name="FHP_V145" wgt-var="K2" files="F1" dcml="0"
intrvl="discrete">
<qstn>
<qstnLit>Dans quelle mesure cette aide vous a-t-elle
été utile? Était-elle
:</qstnLit>
</qstn>
</var>
<qstn>
</codeBook>
EOXML
sentence = doc.children.css("[name=FHP_V145]").children.search("qstnLit").first.text.force_encoding("UTF-8").split("\n")
sentence = sentence.map {|n| n.split.join(" ") }
sentence = sentence.join(" ")
puts sentence
assert_equal(sentence, "Dans quelle mesure cette aide vous a-t-elle été utile? Était-elle :")
end
end
如果无法更正XML,则可以在读取之前将这些实体替换为实际字符,如下所示。然而&amp;#8240;是不正确的。它应该是&amp;#137;
require 'test/unit'
require 'nokogiri'
class MyTest < Test::Unit::TestCase
def test_sentence
doc = Nokogiri::Slop <<-EOXML.gsub(/\&#([^;]+);/){[$1.to_i].pack('c')}
<?xml version='1.0' encoding='utf-8'?>
<codeBook version="1.2.2" ID="klm-456-30">
<var ID="V604" name="FHP_V145" wgt-var="K2" files="F1" dcml="0"
intrvl="discrete">
<qstn>
<qstnLit>Dans quelle mesure cette aide vous a-t-elle
été utile? Était-elle
:</qstnLit>
</qstn>
</var>
<qstn>
</codeBook>
EOXML
sentence = doc.children.css("[name=FHP_V145]").children.search("qstnLit").first.text.force_encoding("ascii-8bit").split("\n")
sentence = sentence.map {|n| n.split.join(" ") }
sentence = sentence.join(" ")
puts sentence
assert_equal(sentence, "Dans quelle mesure cette aide vous a-t-elle été utile? Était-elle :")
end
end
答案 1 :(得分:1)
Nokogiri试图通过编码做到最好。由于它遇到‰
,显然是promille sign,因此它确保输入文本为UTF-8
- ed。到目前为止,它是默认的Nokogiri编码。
在UTF-8
中,Ã
为Ã
,©
为©
。因此,您的输出正确。也就是说,您的输入可能不正确。