2015-03-17 2 views
0

У меня есть такая строка пример, который я получаю от JSON (CP1251):рельсы декодировать JSon cyrrilic строка

Ôèëüòð ìàñëÿíûé OPEL/GM/DAEWOO 

, которые означают:

Фильтр масляный OPEL/GM/DAEWOO 

этот инструмент http://www.artlebedev.ru/tools/decoder/ сказать, что я должен использовать CP1252 → Декодер CP1251. Я стараюсь это так:

my_string.force_encoding('cp1252').force_encoding('1251') 

но это не помогло решить мою проблему. Что я делаю неправильно?

Как я могу преобразовать в нормальный вид моей jyr cyrrillic string в RoR?

я получаю JSON от URL так:

jsonAE = JSON.load(open('http://******/portal.api?l=*****&p=Sih2*****&act=price_by_nr_firm&nr='+article_nr+'&oe=true')) 

из JSON я получаю:

{"result":[{"nr":"OC90","brand":"Knecht","name":"Фильтр масляный OPEL/GM/DAEWOO","stock":"-","delivery":"не известно","minq":"1","upd":"16.03.15 23:40","price":"130.34","currency":"руб."},{"nr":"OC90","brand":"Knecht","name":‌​"Фильтр масляный OPEL/GM/DAEWOO","stock":"-","delivery":"не известно","minq":"1","upd":"17.03.15 00:05","price":"130.34","currency":"руб."}]} 

но повернуть на что-то плохое с JSON.load

+0

Требуется URL-адрес для воспроизведения проблемы. –

+0

Или просто загрузите его с помощью CURL и сохраните в файл (он не должен нарушать начальную кодировку). –

+0

@maxd я мог бы отправить его вам просто через pm как-то ... по электронной почте, может быть? – brabertaser19

ответ

0
▶ puts 'Ôèëüòð ìàñëÿíûé OPEL/GM/DAEWOO' 
     .encode(Encoding::CP1252) 
     .force_encoding(Encoding::CP1251) 
     .encode(Encoding::UTF_8) 
#⇒ Фильтр масляный OPEL/GM/DAEWOO 

Строка в рубин предположительно utf8 ред. Итак, первое действие - сообщить рубину, что строка фактически находится в одном байте. Затем мы говорим: «Эй, мне все равно, я знаю, что это однобайтное на самом деле кириллическое». И, наконец, верните его обратно в utf-8.

Надеюсь, это поможет.

+0

U + 0424 до WINDOWS-1252 при конвертации из UTF-8 в WINDOWS-1252 – brabertaser19

+0

'U + 0424' ни в коем случае не является однобайтным. Это [действительный unicode «Ф»] (http://unicode-table.com/ru/search/?q=U%2B0424). Поскольку вы получаете мусор в json, вы можете обрабатывать его точно, а не путем принудительного кодирования. – mudasobwa

+0

так как это делается?) – brabertaser19

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