2013-04-30 2 views
0

Я пишу этот бот с рубином и столкнулся с проблемой, которая оказалась сложнее, чем я когда-либо думал, что это возможно. Я читал много похожих статей, но ничего не помогло.Вариативные несовместимые кодировки символов

Возможно, это не имеет никакого отношения к watir, но, чтобы быть конкретным, я говорю, что это так. Кроме того, я нахожусь на Fedora. это то, что я пробовал:

table = browser.table(:index , 7) 
puts table[1][1].text 

HTML-фрагмент этой таблицы что-то вроде:

<table> 
<tr> 
    something... 
</tr> 
<tr> 
    <td/> 
    <td> 
    Likiškėlių 
    </td> 
</tr> 
</table> 

я получить

/usr/local/share/gems/gems/multi_json-1.7.2/lib/multi_json/vendor/okjson.rb:364:in `[]=': incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError) 
    from /usr/local/share/gems/gems/multi_json-1.7.2/lib/multi_json/vendor/okjson.rb:364:in `unquote' 
    from /usr/local/share/gems/gems/multi_json-1.7.2/lib/multi_json/vendor/okjson.rb:288:in `strtok' 
    from /usr/local/share/gems/gems/multi_json-1.7.2/lib/multi_json/vendor/okjson.rb:254:in `tok' 
    from /usr/local/share/gems/gems/multi_json-1.7.2/lib/multi_json/vendor/okjson.rb:217:in `lex' 
    from /usr/local/share/gems/gems/multi_json-1.7.2/lib/multi_json/vendor/okjson.rb:45:in `decode' 
    from /usr/local/share/gems/gems/multi_json-1.7.2/lib/multi_json/adapters/ok_json.rb:13:in `load' 
    from /usr/local/share/gems/gems/multi_json-1.7.2/lib/multi_json/adapter.rb:19:in `load' 
    from /usr/local/share/gems/gems/multi_json-1.7.2/lib/multi_json.rb:120:in `load' 
    from /usr/local/share/gems/gems/selenium-webdriver-2.32.1/lib/selenium/webdriver/common/json_helper.rb:11:in `json_load' 
    from /usr/local/share/gems/gems/selenium-webdriver-2.32.1/lib/selenium/webdriver/remote/http/common.rb:59:in `create_response' 
    from /usr/local/share/gems/gems/selenium-webdriver-2.32.1/lib/selenium/webdriver/remote/http/default.rb:66:in `request' 
    from /usr/local/share/gems/gems/selenium-webdriver-2.32.1/lib/selenium/webdriver/remote/http/common.rb:40:in `call' 
    from /usr/local/share/gems/gems/selenium-webdriver-2.32.1/lib/selenium/webdriver/remote/bridge.rb:619:in `raw_execute' 
    from /usr/local/share/gems/gems/selenium-webdriver-2.32.1/lib/selenium/webdriver/remote/bridge.rb:597:in `execute' 
    from /usr/local/share/gems/gems/selenium-webdriver-2.32.1/lib/selenium/webdriver/remote/bridge.rb:508:in `getElementText' 
    from /usr/local/share/gems/gems/selenium-webdriver-2.32.1/lib/selenium/webdriver/common/element.rb:108:in `text' 
    from /usr/local/share/gems/gems/watir-webdriver-0.6.4/lib/watir-webdriver/elements/element.rb:86:in `text' 
    from watir.rb:25:in `<main>' 

я также пытался:

.gsub!(/\P{ASCII}/, '') 
.delete!("^\u{0000}-\u{007F}") 

вариации, но это не получилось. Пожалуйста помоги! Почему кодирование настолько сложно? Я не знаю.

Редактировать: На самом деле, если это помогает, мне не нужно печатать строку, но только для ее записи в файл, но ошибки одинаковы.

и мой рубин версия: рубин 1.9.3p392 (2013-02-22 редакция 39386) [i386-Linux]

Edit: Я также попытался:

# encoding: ASCII-8BIT 
or 
# encoding: utf-8 
with 
puts table[1][1].text.length 

еще до сих пор те же ошибки

Редактировать потому что он даже не покажет .bytesize, я уверен, что это watir. Какие-либо предложения?

ответ

0

Установка драгоценных камней «json» или «oj» устранит эту проблему.

Для получения полного списка поддерживаемых двигателей JSON см. https://github.com/intridea/multi_json.

Смежные вопросы