curl命令输出有错误的编码

时间:2014-11-29 08:46:45

标签: linux bash curl

当我执行

curl "http://weather.yahooapis.com/forecastrss?w=1225955&u=c" 

它返回错误编码的回复:

khan@khan-P55A-UD3P:~$ curl "http://weather.yahooapis.com/forecastrss?w=1225955&u=c" 
���dž��ud@3��v(
����$j$��~����4(���Xy����wH�o�9<q��,�s\��e"�tA�\݌h�ʄ���
                                                             �����h��M���{���J=�m93W
                                                                                      �S�)�e�[sv,�҉eAKM�z{ǔ��g��:���*�����(n�m��&�Jꟈ��Mg�,yn?F�&��_��
ik6                                                                                                                                                      >��0�e&X��簺
sQ~�:�Z;*9�.a"ߕ|��EO[�5"�׫[�k�����1ӆ�n?}r1�u�d��Cڐ��X��`�NF�g!�c��W��G��1�o����Z��53<z`���.��w� s׃��ߖ+�vh��3yt�b}�9
�6�s3K
�W�  �0�هF@���>�X֥Qh�ʰv�BQ�R
ʮ�<�4;�ڊ2�8y� �g���6M(��]�|'�U@�ș�B
�8du!�&'�NOB��ț��3�K��fW��
                           \Rheg�=��F�R;�u�F�s9���&����,��|r��o�E۲�T��V$&�����uf\������v��Z~&�Au��{��ى"m�ʨ���U����2�8�#0F@'������
                                                                                                                                           l���R�XL��~A��̱���p��9��8�iH��nC�i4��^t;����۪���d�V�����7��=S&��2�u�#v~�L`�k���v�0
                            �[���"<���~�z��j,���X=�zmKD/|���(�p��M���⥁}_�!��GџC��2|�G��<ফe��nb"x ?�e�s��;���r;ﲃ�]�9"l��;�}�w�ٮjwR[�C����#O�
                                                                                                                                                      �������#a����s�km���$a�����\)�$�o��Ә�K��FR�*�ý�l�Z
            �
             &�`_�D�WӠ�>`T��0��| c��⿎K%��n:���~(�����.{��}< /~�^!A��$\���c�<�Á
"��k�_��t����t�n�5�^t�وF��l<V�����oo?
                                        `O���3p��ĝ�S�X�G�x��Ź+�
khan@khan-P55A-UD3P:~$ 

但是,相同的命令在另一台计算机上运行正常。 我需要在shell中设置任何东西才能以正确的格式获得它吗?

我使用的是ubuntu 14.04 64位。(Linux khan-P55A-UD3P 3.13.0-40-generic#69-Ubuntu SMP Thu Nov 13 17:53:56 UTC 2014 x86_64 x86_64 x86_64 GNU / Linux)

任何想法?此处也可以看到该命令的屏幕截图:http://i.imgur.com/QDy7F7i.png

4 个答案:

答案 0 :(得分:3)

如果设置了--compressed标志,

curl将自动解压缩响应:

curl --compressed "http://example.com"

-压缩(HTTP)使用libcurl支持的一种算法请求压缩响应,并保存未压缩的文档。如果使用此选项,并且服务器发送了不受支持的编码,则curl将报告错误。

refrence of answer

如果仅需要将此选项用于gzip内容编码,请使用此命令

curl -sH 'Accept-encoding: gzip' http://example.com/ | gunzip -

答案 1 :(得分:1)

我认为与终端的默认编码相关(默认为UTF-8)。您可以尝试将流传递给文件,例如:

curl "http://weather.yahooapis.com/forecastrss?w=1225955&u=c" > response

当我传递字节(Data Handler中的Pdf内容格式)时,我遇到了与rest webservice相同的问题。没有传递流,我接收到终端UTF-8编码的数据,当我使用soapUi时。

答案 2 :(得分:1)

尝试将终端的字符集设置为utf-8。谷歌让我这样: https://unix.stackexchange.com/questions/28136/set-gnome-terminals-default-charset-to-utf8

在设置编码检查之前,通过确定当前字符集来确保确实存在问题:

How to get terminal's Character Encoding

答案 3 :(得分:1)

还有另一种解决方案来添加Accept-Charset标头:

 curl -vvv -H "Accept-Charset: utf-8" http://example.com/ > tmpFile