среда, 31 августа 2011 г.

Re: Ruby 1.9.2, Builder и текст в UTF-8

Рельса, конечно. Смотрим исходник:

         json = string.
            gsub(escape_regex) { |s| ESCAPED_CHARS[s] }.
            gsub(/([\xC0-\xDF][\x80-\xBF]|
                   [\xE0-\xEF][\x80-\xBF]{2}|
                   [\xF0-\xF7][\x80-\xBF]{3})+/nx) { |s|
            s.unpack("U*").pack("n*").unpack("H*")[0].gsub(/.{4}/n, '\\\\u\&')
          }


On Aug 31, 2011, at 2:42 PM, Andrey Ognevsky wrote:

У меня похожий баг, но не совсем о Builder'e: когда я генерирую json (и не только я), Safari отображает русский текст как \u100500\u315920 и так далее. В хроме и ff такого нет. Я уже когда-то давно спрашивал про это, может с тех пор что-то изменилось? Я так понимаю, это не рельсы виноваты в таком поведении?

Сорри за оффтоп.

-- 
Andrey Ognevsky
Sent with Sparrow

On Wednesday, August 31, 2011 at 1:36 PM, Andrei Dziahel wrote:

Всем привет.

Преамбула. Готовлю (точнее допиливаю) RSS для сервиса Яндекс.Новости. Фид готовится, натурально, Builderом, который экранирует не-ASCII символы (делает из них entities типа Ӓ). Мне-то всё равно, да и всяким читалкам тоже. Но вот в яндексе настоятельно просят так не делать — им вроде как нужно смотреть в исходник фида глазами, а entities они читать не умеют.

README Builderа гласит (в сааамом конце), что 
You can get UTF-8 encoded output by making sure that the XML encoding is set to "UTF-8" and that the $KCODE variable is set to "UTF8".
Однако в Ruby 1.9 глобальная переменная $KCODE игнорируется, о чём интерпретатор и ругается при попытке присвоить ей что-нибудь.

Использовать << мне не подходит — экранировать тэги (а именно, символы "<" и ">") нужно. По той же причине не подходит monkeypatch, отрубающий эскейпинг вообще/по запросу. 
И да, баг в bundler висит уже джва года

Собственно, вопросы
  • возможно ли разрешить эту проблему средствами Builder?
  • есть ли в природе готовый патч к builder, чинящий эту багу?
  • подвержены ли этому багу аналоги Builder?
  • если нет — сложно ли заставить приложение использовать аналог?
Заранее благодарен.
--
Regards,
Andrei Dziahel


--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru


--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

Комментариев нет:

Отправить комментарий