Разбор Nokogiri xml на OSX Lion против Ubuntu 10.04 - PullRequest
1 голос
/ 31 января 2012

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

1 Ответ

1 голос
/ 31 января 2012

Так что используйте 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 - нет.

...