Android http post send with different charset encoding



我在Android上用德语"umlaute"äöü做一个HTTP帖子时遇到了问题。我正在将一个 json 对象传递给下面的方法,并在返回的客户端响应中使用 post 和请求实体执行返回的 ClientResource 。当我想发布类似{"foo":"bär"}的内容时,HttpClient会发送类似{"foo":"b√§r"}的内容。

不知道为什么。我做错了什么。

public static ClientResource newPostRequest(Context context, String urn,
        JSONObject form) throws MissingAccessTokenException {
    ClientResource resource = new ClientResource(uri + urn);
    StringRepresentation sr = new StringRepresentation(form.toString());
    sr.setMediaType(MediaType.APPLICATION_JSON);
    resource.getRequest().setEntity(sr);
    return resource;
}

更新

我使用了默认的android http客户端(我相信这是一个apache http客户端)并得到了同样的错误。所以问题可能出在这里。我尝试实现另一个 json 解析器(当前为 gson)和(如果可能的话)另一个 http 客户端。稍后再回来...

更新

Gson不是问题。我在 StringRepresentation中添加了一个 json 字符串,但没有任何变化。

嗯,这是一个奇怪的问题。也许有人可以为我清除这一点。我总是问自己,为什么√§在哪里使用,我发现翻译utf-8 ä会导致√§。显然,我的安卓手机没有使用宏人,但我的Mac使用了。因此,我更改了日食中的文本文件编码,重新启动了日食和tomcat服务器,它起作用了。Eclipse中的TCP/IP监视器仍然使用mac roman,这看起来仍然错误。 因此,这是我的服务器的问题,而不是 android 上的 restlet 客户端的问题。我只是看不到它,因为TCP/IP监视器在宏曼中编码了所有内容。

您是否尝试过在StringRepresentation上调用setCharacterSet(...)?例如,

StringRepresentation sr = new StringRepresentation(form.toString());
sr.setCharacterSet(CharacterSet.UTF_8);

最新更新