【发布时间】:2017-05-16 08:43:27
【问题描述】:
我使用 REST API 从 curl 发送到服务,但我不明白为什么服务器没有正确接收特殊字符 ÆØÅ。
当我在 CMD 中从 curl 执行此操作时,服务器接收到的丹麦字符 ÆØÅ 不正确。
当我使用浏览器时,通过 StrongLoop API,字符被正确插入。
据我所知,我需要定义字符集。但这没有任何效果。使用 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。
另外请注意,控制台会正确显示æøå,但不会显示响应。
【问题讨论】:
-
不知道是否可以尝试使用
--data-binary而不是-d? (尽管选项名称中有“二进制”,但它不(仅)用于二进制数据;它只是确保数据按原样发送。) -
CMD的字符集是什么? that 是curl的参数的字符集,即数据,因此这是要指定的字符集。如果您使用文件而不是命令行参数来提供数据,那么您可以控制文件的编码并将其设为 UTF-8。要查看CMD代码页,请运行命令mode,例如我说Code page: 437。 -
要将
CMD更改为 UTF-8,请参阅 Unicode characters in Windows command line - how? 实际上,因为这确实是您的答案,所以我会投票结束您的问题,因为它是重复的。 --- Godt nytår ;-) -
如果我使用 --data-binary 它仍然是一样的。我还尝试将代码页更改为 65001 并将字体设置为 Lucida Console,这似乎没有任何变化。
-
尝试用 ^ 转义它们,所以它看起来像 \"^ø^æ^å\" - 然后意识到微软不知道如何编写终端,你不应该使用 cmd.exe ,然后安装一个像样的终端,比如 Cygwin Bash (cygwin.com)
标签: json curl strongloop