Я запускаю этот скрипт ruby:
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?