Ruby on rails rails解码json循环字符串
我有这样一个字符串示例,它来自json(cp1251): 这意味着: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(
Фильтр масляный 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