Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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 如何解码百分位编码字节[]_Java_Python_Rest_Post_Url Encoding - Fatal编程技术网

Java 如何解码百分位编码字节[]

Java 如何解码百分位编码字节[],java,python,rest,post,url-encoding,Java,Python,Rest,Post,Url Encoding,我使用post方法向rest服务发送字节流,如下所示: h = httplib2.Http(".cache") h.add_credentials("admin","admin") data = urllib.urlencode({"packet":str(pack)}) resp, content = h.request(url, "POST", data) post调用结果使用%对字节流进行编码(数据已编码)。现在我想检索回原始字节流。我在rest服务端(java)尝试了以下方式,但无法

我使用post方法向rest服务发送字节流,如下所示:

h = httplib2.Http(".cache")
h.add_credentials("admin","admin")

data = urllib.urlencode({"packet":str(pack)})
resp, content = h.request(url, "POST", data)
post调用结果使用
%
对字节流进行编码(
数据
已编码)。现在我想检索回原始字节流。我在rest服务端(java)尝试了以下方式,但无法检索原始字节流

String pack_decode = java.net.URLDecoder.decode(packet, "UTF-8");
// I am expecting decoded byte stream (free from `%` encoding) but I am getting the same encoded string.

你能发布完整的源代码吗?看来这应该行得通,至少下一步在我这边行得通:

客户端(Python):

服务器(Java):

服务器端的输出:

编码:

8%B8%d8%0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 8 8 8 8 8 8 8%0 0 0 0 0 0 0 0 0 0%8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8%%%10 10 10 10 10 10%%%%%10 10 10 10%%%%%%10 10 10 10 10 10 10 10%%%%%%%8 8 8 8 8%%%%%%8 8 8 8 8 8 8%%%%%以上以上以上以上以上10 10 10 10 10 10 10 10%%%%%%%%%%%%%%%%%以上以上以上以上以上以上以上8 8 8 8 8 8 8 8 8 8 8 8 8 8 8%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%83+%D0%BD%D0%B5+%D0%B2%D0%B0%D0%B6%D0%B5%D0%BD%2C+%D0%BF%D0%BE%D1%82%D0%BE%D0%BC%D1%83+%D1%87%D1%82%D0%BE+%D0%B3%D1%80%D1%8F%D0%B4%D0%B5%D1%82+%D0%B2%D0%BE%D0%B9%D0%BD%D0%B0+%D0%B2+%D0%95%D0%B2%D1%80%D0%BE%D0%BF%D0%B5

解码:

封包=ааааааааааа,аааааааа

# -*- coding: utf-8 -*-

import httplib2
import urllib

url = 'http://127.0.0.1:8000/test'
h = httplib2.Http(".cache")
pack = 'Источники в Кремле: вердикт Гааги по ЮКОСу не важен, потому что грядет война в Европе'
data = urllib.urlencode({"packet":str(pack)})
resp, content = h.request(url, "POST", data)
package com.example;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class Server {

    public static void main(String[] args) throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
        server.createContext("/test", new Handler());
        server.setExecutor(null);
        server.start();
    }

    static class Handler implements HttpHandler {
        public void handle(HttpExchange t) throws IOException {

            InputStreamReader isr =  new InputStreamReader(t.getRequestBody(),"utf-8");
            BufferedReader br = new BufferedReader(isr);

            int b;
            StringBuilder buf = new StringBuilder(512);
            while ((b = br.read()) != -1) {
                buf.append((char) b);
            }

            br.close();
            isr.close();

            System.out.println("Encoded msg: \n" + buf); 

            String pack_decode = java.net.URLDecoder.decode(buf.toString(), "UTF-8");
            System.out.println("Decoded msg: " + pack_decode); 

        }
    }

}