Анализ Nokogiri xml на OSX Lion и Ubuntu 10.04

Я запускаю этот рубиновый скрипт:

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?


person user1180596    schedule 31.01.2012    source источник
comment
Какие версии Nokogiri/libxml вы используете - что показывает nokogiri -v?   -  person matt    schedule 31.01.2012


Ответы (1)


Так что используйте US-ASCII.

strings /usr/lib/libxml2.so | grep USASCII
strings /usr/lib/libxml2.so | grep US-ASCII
US-ASCII

... и тот же результат с /usr/lib/libxml2.2.dynlib. Странный. Я полагаю, что Mac определяет USASCII как кодировку, а Linux — нет.

person Reactormonk    schedule 31.01.2012