xmpp4r/xmpp4r-simple учим русскому
Обычно как только сделаешь простейший клиент XMPP через используя гем xmpp4r начинается трабла с русским языком, а точнее со всеми кодировками != ASCII. Т.е. все прекрасно работает до тех пор пока не появится текст не на английском.
Если в коде включен отладчик и код выглядит примерно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #coding: utf-8 require 'rubygems' require 'xmpp4r-simple' include Jabber Jabber::debug = true jabber = Jabber::Simple.new('login@server.com', 'pass') loop do messages = jabber.received_messages #jabber.status(:away,'lets chat') messages.each do |message| body = message.body #if message.type == :chat puts '>'+body jabber.deliver(message.from, 'Re:'+body) end#each sleep 1 end#loop |
То и вылетит ошибка примерно такая:
1 2 3 4 5 6 7 8 9 10 11 12 | REXML::ParseException #<Encoding::CompatibilityError: incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string)> /usr/local/rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rexml/source.rb:214:in `match' /usr/local/rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rexml/source.rb:214:in `match' /usr/local/rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rexml/parsers/baseparser.rb:369:in `pull' /usr/local/rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rexml/parsers/sax2parser.rb:92:in `parse' /usr/local/rvm/gems/ruby-1.9.2-p180/gems/xmpp4r-0.5/lib/xmpp4r/streamparser.rb:79:in `parse' /usr/local/rvm/gems/ruby-1.9.2-p180/gems/xmpp4r-0.5/lib/xmpp4r/stream.rb:75:in `block in start' ... Exception parsing Line: Position: 0 Last 80 unconsumed characters: |
Лечится она еще проще чем предыдущая.
Открываем тот самый /usr/local/rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rexml/source.rb
, находим строку с номером 214 (я там в файле уже понавставлял несколько лишних строчек, поэтому номер может несущественно отличатся):
211 212 213 214 215 216 | ... def match( pattern, cons=false ) rv = pattern.match(@buffer) @buffer = $' if cons and rv while !rv and @source ... |
И приводим этот кусок к виду:
211 212 213 214 215 216 | ... def match( pattern, cons=false ) @buffer=@buffer.force_encoding('utf-8') rv = pattern.match(@buffer) @buffer = $' if cons and rv ... |
Также на всякий случай не помешает вставить в самое начало этого файла строчку:
1 | #coding: utf-8 |
После таких манипуляций у меня все начало корректно работать.
спасибо дружище!
помогло?
Спасибо огромное! Jabber::debug = true теперь буду почаще включать
У меня ошибка пофвляется в
/Users/maksimduhanov/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/openssl/buffering.rb:322:in `syswrite’
Сделал замену но н помогло::
#@wbuffer.force_encoding(Encoding::BINARY)
@wbuffer=@wbuffer.force_encoding(‘utf-8′)
Весь файл: http://pastie.org/8525112
Наверное еще нужно гдето на “приеме” поправить (
Помогите, пожалуйста!
Ой! А ваше решение помогло! (Когда Debug включил!)
Спасибо!
[...] гем xmpp4r-simple, ошибки которого были замечены тут и [...]