rails解码json西里尔字符串

时间:2015-03-17 11:46:11

标签: ruby-on-rails ruby json encoding

我有这样的字符串示例,我从json(cp1251)获得:

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

意思是:

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

这个工具http://www.artlebedev.ru/tools/decoder/说我必须使用CP1252→CP1251解码器。我这样试试:

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

但它没有解决我的问题。我做错了什么?

如何在RoR中转换为normall查看我的json cyrrillic字符串?

我从网址获取json所以:

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

会变成坏事

1 个答案:

答案 0 :(得分:0)

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

怀疑ruby中的字符串是utf8。因此,第一个操作是通知ruby字符串实际上是一个字节。比起我们说“嘿,不在乎,我知道这个单字节实际上是西里尔字母。”最后,把它转回到utf-8。

希望它有所帮助。