Я запускаю этот рубиновый скрипт:
require "rubygems"
require "nokogiri"
xml = "<?xml version=\"1.0\" encoding=\"USASCII\" ?>"
parsed = Nokogiri.parse(xml)
p parsed
Когда я запускаю его на OSX Lion (ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]), он печатает то, что я ожидаю:
#<Nokogiri::XML::Document:0x85fd9ed8 name="document">
Когда я запускаю тот же скрипт в Ubuntu 10.04.3 ruby-1.9.2-p290, я получаю сообщение Неподдерживаемая кодировка USASCII (Nokogiri::XML::SyntaxError)
/home/stewie/.rvm/gems/ruby-1.9.2-p290@peon/gems/nokogiri-1.4.4/lib/nokogiri/xml/document.rb:33:in `read_memory': Unsupported encoding USASCII (Nokogiri::XML::SyntaxError)
from /home/stewie/.rvm/gems/ruby-1.9.2-p290@peon/gems/nokogiri-1.4.4/lib/nokogiri/xml/document.rb:33:in `parse'
from /home/stewie/.rvm/gems/ruby-1.9.2-p290@peon/gems/nokogiri-1.4.4/lib/nokogiri/xml.rb:33:in `XML'
from /home/stewie/.rvm/gems/ruby-1.9.2-p290@peon/gems/nokogiri-1.4.4/lib/nokogiri.rb:82:in `parse'
from nick.rb:6:in `<main>'
Я проверил свою локаль в Ubuntu, и все выглядит нормально:
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Обновление: в Ubuntu, если я изменяю USASCII на US-ASCII, ошибка исчезает.
Так почему же скрипт работает на Lion, но не работает на Ubuntu? Есть ли какая-то разница с возможностью разбора libxml2?
nokogiri -v
? - person matt   schedule 31.01.2012