【问题标题】:Android http post send with different charset encoding使用不同字符集编码的 Android http post 发送
【发布时间】:2012-06-27 16:30:08
【问题描述】:

我在使用德语“umlaute”äöü 在 android 上发布 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 使用了。因此,我更改了 eclipse 中的文本文件编码,重新启动了 eclipse 和 tomcat 服务器并且它工作了。 Eclipse 中的 TCP/IP 监视器仍然使用 mac roman,看起来仍然是错误的。因此,这是我的服务器的问题,而不是 android 上的 restlet 客户端。我只是看不到它,因为 TCP/IP 监视器在 macroman 中编码了所有内容。

【问题讨论】:

    标签: android rest restlet restlet-2.0


    【解决方案1】:

    您是否尝试在您的StringRepresentation 上拨打setCharacterSet(...)?例如,

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

    【讨论】:

    • 首先,您提到了HttpClient,但您使用的是Restlet。你可以解释吗?其次,您如何确定数据发送不正确,而不是在服务器上解码不正确?
    • Restlet 不是在 Android 上使用 DefaultHttpClient 吗?我开始监视传入请求的服务器端口,这就是我确定客户端发送的内容的方式。
    • restlet can 使用 HttpClient,但它不一定使用它(听起来像在你的情况下它正在使用它)。无论如何,由于您使用的是restlet接口,因此您需要在restlet的上下文中解决问题。
    猜你喜欢
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    相关资源
    最近更新 更多