2017-01-02 3 views
0

Я отправляю из curl в службу с REST API, и я не понимаю, почему сервер не получает специальные символы ÆØÅ правильно.Специальные символы ÆØÅ не получены с помощью curl

Когда я делаю это из curl в CMD, сервер неправильно принимает датские символы ÆØÅ.

Когда я пользуюсь браузером через API StrongLoop, символы правильно вставлены.

Насколько я могу исследовать, мне нужна определенная кодировка. Но это не имеет никакого эффекта. Использование chcp 65001 и шрифта Lucida Console не помогает. Я немного потерял идентификацию проблемы.

Эта команда используется:

curl -X POST -H "Content-Type: application/json; charset=UTF-8" -H "Accept: application/json" -d "{ \"metadata\": { \"user\": \"aa\", \"version\": \"ED\", \"transaction_date\": \"2016-12-30\", \"context_info\": \"string\" }, \"container\": { \"type\": \"SC\", \"type_source\": \"string\", \"op_status_source\": \"string\", \"identification\": \"øæå\", \"id_source\": \"876332d2321\", \"ver\": 0 }}" "http://xx.com/xx/containers?access_token=xxx 

Ответ:

{"type":"SC","type_source":"string","op_status_source":"string","identification":"���","id_source":"8763wwd32d2321","ver":1} 

æøå будет либо ∩┐╜∩┐╜∩┐╜», или подобное, в зависимости на CHCP.

Также обратите внимание, что консоль будет отображать æøå правильно, но не ответ.

+0

Невозможно попробовать с '--data-binary' вместо' -d'? (Несмотря на «двоичный» в имени опции, это не (просто) для двоичных данных, а просто обеспечивает отправку данных как есть.) – sideshowbarker

+1

Что такое набор символов 'CMD'? * Это * - набор символов аргументов 'curl', т. Е. Данные, так что это должна быть кодировка. Если вы используете файл для передачи данных, вместо аргумента командной строки, вы можете управлять кодировкой файла и делать его UTF-8. Чтобы увидеть кодовую страницу «CMD», запустите команду 'mode', например. моя говорит ['Кодовая страница: 437'] (https://en.wikipedia.org/wiki/Code_page_437). – Andreas

+1

Чтобы изменить 'CMD' на UTF-8, см. [Unicode символы в командной строке Windows - как?] (Http://stackoverflow.com/q/388490/5221149) На самом деле, поскольку это действительно ответ для вас, я проголосуйте, чтобы закрыть ваш вопрос в качестве дубликата. --- Godt nytår ;-) – Andreas

ответ

0

Мне удалось заставить это работать, поставив json с датскими персонажами в свой собственный файл, называемый test.json. Я убедился - и это было ключом - что json-файл был сохранен как utf-8: я сделал это, открыв файл с помощью блокнота и использовал «Сохранить как», выбрав кодировку utf-8 в качестве кодировки файлов.

В верхней части файла биты, содержащей завиток команды, я поставил CHCP 65001.

curl.exe -X PUT --header "Content-Type: application/json; charset=UTF-8" --header "Accept: application/json" -s -d @test.json "<theUrl>" 

Я добавил -s, чтобы сделать завиток идти тихо об ошибке я получал (Failed писать тело), ​​хотя команда (которая обновляет запись в базе данных), кажется, работает успешно.