Curl — ответ с неправильной кодировкой, считывающий json

#curl #encoding #utf-8 #ascii #decode

Вопрос:

Я пытаюсь прочитать json из nominatim, используя команду Curl из командной строки, поэтому я просто набрал:

 curl "https://nominatim.openstreetmap.org/search?q="Tokyo"amp;format=json"
 

но в японских иероглифах есть плохая кодировка. Это и есть ответ:

 [{"place_id":258676795,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"relation","osm_id":1543125,"boundingbox":["20.2145811","35.8984245","135.8536855","154.205541"],"lat":"35.6828387","lon":"139.7594549","display_name":"東京都, 日本","class":"boundary","type":"administrative","importance":0.7593311914925306,"icon":"https://nominatim.openstreetmap.org/ui/mapicons//poi_boundary_administrative.p.20.png"},{"place_id":20598104,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"node","osm_id":2149761647,"boundingbox":["35.6760912","35.6860912","139.7621861","139.7721861"],"lat":"35.6810912","lon":"139.7671861","display_name":"東京, Keiyo Street, 丸の内1, 丸の内, 千代田区, 東京都, 100-0005, 日本","class":"railway","type":"station","importance":0.5591218901586479,"icon":"https://nominatim.openstreetmap.org/ui/mapicons//transport_train_station2.p.20.png"},{"place_id":70003988,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"node","osm_id":6396868334,"boundingbox":["35.6727691","35.6827691","139.7596365","139.7696365"],"lat":"35.6777691","lon":"139.7646365","display_name":"東京, 鍛冶橋通り, 丸の内2, 丸の内, 千代田区, 東京都, 100-0005, 日本","class":"railway","type":"station","importance":0.5591218901586479,"icon":"https://nominatim.openstreetmap.org/ui/mapicons//transport_train_station2.p.20.png"},{"place_id":71190469,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"node","osm_id":6397207541,"boundingbox":["35.6771116","35.6871116","139.7606744","139.7706744"],"lat":"35.6821116","lon":"139.7656744","display_name":"東京, 丸の内1, 丸の内, 千代田区, 東京都, 100-0005, 日本","class":"railway","type":"station","importance":0.5591218901586479,"icon":"https://nominatim.openstreetmap.org/ui/mapicons//transport_train_station2.p.20.png"},{"place_id":259023488,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"relation","osm_id":5303898,"boundingbox":["35.632591","35.688161","139.517033","139.593089"],"lat":"35.660036","lon":"139.554815","display_name":"調布市, 東京都, 日本","class":"boundary","type":"administrative","importance":0.5022260781248801,"icon":"https://nominatim.openstreetmap.org/ui/mapicons//poi_boundary_administrative.p.20.png"},{"place_id":259078458,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"relation","osm_id":5301789,"boundingbox":["35.604698","35.657961","139.393498","139.4739366"],"lat":"35.637188","lon":"139.443503","display_name":"多摩市, 東京都, 日本","class":"boundary","type":"administrative","importance":0.4888462520106494,"icon":"https://nominatim.openstreetmap.org/ui/mapicons//poi_boundary_administrative.p.20.png"},{"place_id":258856136,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"relation","osm_id":1759475,"boundingbox":["35.618431","35.650744","139.561968","139.594114"],"lat":"35.634023","lon":"139.575977","display_name":"狛江市, 東京都, 日本","class":"boundary","type":"administrative","importance":0.470967951474371,"icon":"https://nominatim.openstreetmap.org/ui/mapicons//poi_boundary_administrative.p.20.png"},{"place_id":46725894,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"node","osm_id":3728940234,"boundingbox":["-5.8168777","-5.7768777","142.8181612","142.8581612"],"lat":"-5.7968777","lon":"142.8381612","display_name":"Tokyo, Hayapuga Rural LLG, Tari-Pori District, Hela, Highlands Region, Papua Niugini","class":"place","type":"hamlet","importance":0.36,"icon":"https://nominatim.openstreetmap.org/ui/mapicons//poi_place_village.p.20.png"},{"place_id":94556779,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"way","osm_id":23921332,"boundingbox":["14.6744911","14.6761699","121.0951871","121.097869"],"lat":"14.6754461","lon":"121.0967373","display_name":"Tokyo, Batasan Hills, 2nd District, Quezon City, Eastern Manila District, Metro Manila, 2, Mindanao","class":"highway","type":"residential","importance":0.21},{"place_id":146821334,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"way","osm_id":226371613,"boundingbox":["7.0842449","7.0880334","125.5133359","125.5133699"],"lat":"7.0861394","lon":"125.5133561","display_name":"Tokyo, Samulco Village, Cawa-Cawa, Santo Niño, Davao City, Davao Region, 8022, Mindanao","class":"highway","type":"residential","importance":0.21}]
 

поэтому я хотел бы знать, есть ли способ правильно визуализировать эти символы (возможно, включая правильные параметры в строке curl).
Заранее спасибо

Ответ №1:

Вы работаете из командной строки linux?

В Linux без графического интерфейса/X-Windows я не могу видеть китайский символ. в vi или vim или на командном уровне. Если я перенаправлю вывод curl в файл и открою его в браузере, то увижу символы. Вы можете установить кодировку с помощью curl, но это не решит эту проблему в данной ситуации. Пример:

curl -H "Content-Type: application/json;charset=UTF-8" ...

В Linux с графическим интерфейсом/ X-Windows я вижу китайские символы в vi и т. Д.

В обоих случаях кодировка UTF-8 и может отображать китайские иероглифы.

Комментарии:

1. Нет, я работаю над Windows. Я знаю, запускаю код на reqbin.com/curl Я правильно вижу результат, проблема заключается в ответе из консоли командной строки Windows, поэтому я предполагаю, что Windows использует другую кодировку, но я не знаю, можно ли изменить кодировку ответа json перед «печатью» результата на консоли…

2. В командной консоли Windows активируйте кодовую страницу для китайских символов: chcp 936. Затем выполните команду curl. Вы увидите китайские иероглифы в оболочке.