编码/解码HttpPost UTF-8 Java

时间:2014-08-04 19:07:25

标签: java servlets utf-8 httpclient

我在尝试将utf8格式的发布数据从客户端发送到我的服务器时遇到了麻烦。

我已经阅读了很多关于这个主题但我找不到解决方案。我确信我遗漏了一些基本的东西。

这是我发布帖子请求的客户端代码

public static PostResponse post(String url, String data) {
        PostResponse response = new PostResponse();
        try {
            // 1. create HttpClient
            HttpClient httpclient = new DefaultHttpClient();

            // 2. make POST request to the given URL
            HttpPost httpPost = new HttpPost(url);
            httpPost.setHeader("Content-Type", "text/plain; charset=UTF-8");

            // 3. set string to StringEntity
            StringEntity se = new StringEntity(data);

            // 4. set httpPost Entity
            httpPost.setEntity(se);

            // 5. Execute POST request to the given URL
            HttpResponse httpResponse = httpclient.execute(httpPost);

        } catch (IOException e) {

        }
        return response;

    }

这是我服务器端的代码,用于接收utf8中的文本(波兰字符没有出现,我正在“?”而是。)

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
            BufferedReader reader;
            reader = req.getReader();
            Gson gson = new Gson();
            msg = gson.fromJson(reader, MsgChat.class); //String in the client was json
        } catch (IOException e) {

        }
}

我只写了相关代码。

对此我感谢任何帮助。 感谢。

3 个答案:

答案 0 :(得分:6)

我遇到了同样的问题。您应该使用以下代码:

httpPost.setEntity(new StringEntity(json, "UTF-8"));

希望这可以帮到你。

答案 1 :(得分:1)

我认为你应该使用new StringEntity(data, ContentType.APPLICATION_JSON)。默认情况下,它是iso-8859-1setHeader不是我理解的设置编码的正确方法。

答案 2 :(得分:0)

我建议您尝试使用HttpPost的addRequestHeader方法,而不是

httpPost.addRequestHeader("Content-Type", "text/plain;charset=UTF-8");

因为这是向您的请求添加内容类型标头的推荐方式。