Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用restful客户端请求时出现阿拉伯语编码错误_Java_Python_Rest_Character Encoding_Python 2.6 - Fatal编程技术网

Java 使用restful客户端请求时出现阿拉伯语编码错误

Java 使用restful客户端请求时出现阿拉伯语编码错误,java,python,rest,character-encoding,python-2.6,Java,Python,Rest,Character Encoding,Python 2.6,我有以下python中的restful客户端: import requests; s= 'وإليك ما يقوله إثنان من هؤلاء'; resp = requests.post('http://localhost:8080/MyApp/webresources/production/sendSentence', json={'sentence': s,} ) 上述代码调用一个用java实现的web服务,该服务返回从请求客户端发送的相同语句 这是java Web服务: @POS

我有以下python中的restful客户端:

import requests;
s= 'وإليك ما يقوله إثنان من هؤلاء';
resp = requests.post('http://localhost:8080/MyApp/webresources/production/sendSentence', json={'sentence': s,} )
上述代码调用一个用java实现的web服务,该服务返回从请求客户端发送的相同语句

这是java Web服务:

@POST
@Consumes("application/json")
@Produces("text/html; charset=UTF-8")
@Path("/sendSentence")
public String sendSentence(@Context HttpServletRequest requestContext, String valentryJson) throws Exception {
    try {
        if (valentryJson != null) {
            JSONObject jsonObject;
            jsonObject = new JSONObject(valentryJson);
            String sentence = jsonObject.getString("sentence");

            return sentence;
        }
    } catch (JSONException ex) {
    }
    return "";
}
问题在于编码,因为当我尝试打印内容时,结果是:

>>> resp.content

'\xd9\x88\xd8\xa5\xd9\x84\xd9\x8a\xd9\x83 \xd9\x85\xd8\xa7 \xd9\x8a\xd9\x82\xd9\x88\xd9\x84\xd9\x87 \xd8\xa5\xd8\xab\xd9\x86\xd8\xa7\xd9\x86 \xd9\x85\xd9\x86 \xd9\x87\xd8\xa4\xd9\x84\xd8\xa7\xd8\xa1'
或者当我使用打印时:

>>> print resp.content

    ظˆط¥ظ„ظٹظƒ ظ…ط§ ظٹظ‚ظˆظ„ظ‡ ط¥ط«ظ†ط§ظ† ظ…ظ† ظ‡ط¤ظ„ط§ط،

您的Java Web服务生成HTML,UTF-8编码:

@Produces("text/html; charset=UTF-8")
但您获取了未经解码返回的原始字节:

>>> resp.content
response.content
提供字节,而不是Unicode文本。您可以改用
resp.text
属性,该属性使用
内容类型
标题的
字符集
参数来解码数据:

>>> resp.text
u'\u0648\u0625\u0644\u064a\u0643 \u0645\u0627 \u064a\u0642\u0648\u0644\u0647 \u0625\u062b\u0646\u0627\u0646 \u0645\u0646 \u0647\u0624\u0644\u0627\u0621'
>>> print resp.text
وإليك ما يقوله إثنان من هؤلاء

但是要小心;如果不存在
字符集
参数,但内容类型标题指示这是
文本/…
内容类型(如
文本/html
),则
请求
将遵循HTTP RFC并将数据解码为拉丁语-1。这将默默地工作,但可能不是正确的编解码器。对于HTML数据,使用HTML解析器,传入bytestring,并将其留给解析器提取正确的编解码器(HTML通常在
标记中记录正确的编码)。请参阅。

您的Java Web服务生成HTML,UTF-8编码:

@Produces("text/html; charset=UTF-8")
但您获取了未经解码返回的原始字节:

>>> resp.content
response.content
提供字节,而不是Unicode文本。您可以改用
resp.text
属性,该属性使用
内容类型
标题的
字符集
参数来解码数据:

>>> resp.text
u'\u0648\u0625\u0644\u064a\u0643 \u0645\u0627 \u064a\u0642\u0648\u0644\u0647 \u0625\u062b\u0646\u0627\u0646 \u0645\u0646 \u0647\u0624\u0644\u0627\u0621'
>>> print resp.text
وإليك ما يقوله إثنان من هؤلاء

但是要小心;如果不存在
字符集
参数,但内容类型标题指示这是
文本/…
内容类型(如
文本/html
),则
请求
将遵循HTTP RFC并将数据解码为拉丁语-1。这将默默地工作,但可能不是正确的编解码器。对于HTML数据,使用HTML解析器,传入bytestring,并将其留给解析器提取正确的编解码器(HTML通常在
标记中记录正确的编码)。请参阅。

您没有解码内容。这可能是Python2?我尝试使用resp.content.decode('utf8')对其进行解码,但它不起作用是的,它是Python2.6.5,怎么不起作用?当您将结果打印到控制台时,是否会出现
unicodeincodeError
?如果是这样,那么您的控制台将无法处理您的文本(Python必须进行编码才能打印,并且您的控制台未配置为接收阿拉伯语文本)。请注意,您的第一个示例将在Python 2.6中失败,除非您使用hack更改用于隐式解码和编码的内置默认编解码器。不要那样做,那黑客被禁用是有原因的。你没有解码内容。这可能是Python2?我尝试使用resp.content.decode('utf8')对其进行解码,但它不起作用是的,它是Python2.6.5,怎么不起作用?当您将结果打印到控制台时,是否会出现
unicodeincodeError
?如果是这样,那么您的控制台将无法处理您的文本(Python必须进行编码才能打印,并且您的控制台未配置为接收阿拉伯语文本)。请注意,您的第一个示例将在Python 2.6中失败,除非您使用hack更改用于隐式解码和编码的内置默认编解码器。不要那样做,那黑客被禁用是有原因的。