Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails解码json循环字符串_Ruby On Rails_Ruby_Json_Encoding - Fatal编程技术网

Ruby on rails rails解码json循环字符串

Ruby on rails rails解码json循环字符串,ruby-on-rails,ruby,json,encoding,Ruby On Rails,Ruby,Json,Encoding,我有这样一个字符串示例,它来自json(cp1251): 这意味着: Фильтр масляный OPEL/GM/DAEWOO 这个工具说我必须使用CP1252→ CP1251解码器。我试着这样做: my_string.force_encoding('cp1252').force_encoding('1251') 但这并没有解决我的问题。我做错了什么 如何转换为normall查看RoR中的json循环字符串 我从url获取json,因此: jsonAE = JSON.load(open(

我有这样一个字符串示例,它来自json(cp1251):

这意味着:

Фильтр масляный OPEL/GM/DAEWOO
这个工具说我必须使用CP1252→ CP1251解码器。我试着这样做:

my_string.force_encoding('cp1252').force_encoding('1251')
但这并没有解决我的问题。我做错了什么

如何转换为normall查看RoR中的json循环字符串

我从url获取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

▶ puts 'Ôèëüòð ìàñëÿíûé OPEL/GM/DAEWOO'
        .encode(Encoding::CP1252)
        .force_encoding(Encoding::CP1251)
        .encode(Encoding::UTF_8)
#⇒ Фильтр масляный OPEL/GM/DAEWOO
ruby中的字符串被怀疑是
utf8
ed。因此,第一个操作是通知ruby该字符串实际上在一个字节中。然后我们说“嘿,别在意,我知道这一个字节实际上是西里尔字母。”最后,把它转回到utf-8


希望有帮助。

需要URL来重现问题。或者使用CURL下载并保存到文件(不应破坏初始编码)。@maxd我可以通过pm将其发送给您。。。可能在电子邮件上?@maxd如何编码?@maxd重现问题所需的一切都是字符串。从UTF-8到WINDOWS-1252的转换中,U+0424到WINDOWS-1252决不是一个字节。它是。由于您在json中接收到一些垃圾,您可能希望准确地处理它,而不是通过强制编码。我不知道您实际接收到什么。无论它偶尔是utf8和/或cp1251,我都会使用try-catch编码,将其设置为一个字节,如上面所示。除非失败,否则说明您已经拥有有效的utf8。在从UTF-8到WINDOWS-1252的转换过程中,我收到错误
U+0424到WINDOWS-1252。我只是注意到你的解决方案不起作用。我想随着时间的推移,你会被否决,而不是被我否决。
▶ puts 'Ôèëüòð ìàñëÿíûé OPEL/GM/DAEWOO'
        .encode(Encoding::CP1252)
        .force_encoding(Encoding::CP1251)
        .encode(Encoding::UTF_8)
#⇒ Фильтр масляный OPEL/GM/DAEWOO