JSON с JRuby - не анализирует результат в UTF-8 - PullRequest
3 голосов
/ 21 марта 2012

Я использую реализацию JSON для Ruby в моем проекте rails для анализа строки JSON, отправленной ajax, но я обнаружил, что, хотя строка json находится в UTF-8, получаемый результат находится в ASCII-8BIT по умолчанию, см. Ниже

jruby-1.6.7 :068 > json_text = '["に到着を待っている"]'
 => "[\"に到着を待っている\"]"
jruby-1.6.7 :069 > json_text.encoding
 => #<Encoding:UTF-8>
jruby-1.6.7 :070 > json_parsed = JSON.parse(json_text)
 => ["\u00E3\u0081\u00AB\u00E5\u0088\u00B0\u00E7\u009D\u0080\u00E3\u0082\u0092\u00E5\u00BE\u0085\u00E3\u0081\u00A3\u00E3\u0081\u00A6\u00E3\u0081\u0084\u00E3\u0082\u008B"]
jruby-1.6.7 :071 > json_parsed.first.encoding
 => #<Encoding:ASCII-8BIT>

Я не хочу, чтобы его экранировали, я хотел бы получить результат UTF-8. Есть ли способ установить это? Я проверяю документацию по проекту JSON, не находя вариантов кодирования для метода JSON.parse. Может быть, я что-то пропустил, как я мог это сделать?

UPDATE: как сообщает @ fl00r, этот пример работает нормально в МРТ, но не в JRUBY

1 Ответ

1 голос
/ 22 марта 2012

Это похоже на ошибку, так как на самом деле это работает при использовании чистой версии:

jruby-1.6-head :001 > require 'json/pure'
 => true 
jruby-1.6-head :002 > json_text = '["に到着を待っている"]'
 => "[\"に到着を待っている\"]" 
jruby-1.6-head :003 > json_parsed = JSON.parse(json_text)
 => ["に到着を待っている"] 
jruby-1.6-head :004 > json_parsed.first.encoding
 => #<Encoding:UTF-8> 
jruby-1.6-head :005 >

Редактировать: Только что вы открыли билет для этого ...

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

$ git clone https://github.com/flori/json.git
$ cd json
$ rake jruby_gem
$ jruby -S gem install pkg/json-1.6.6-java.gem
...