我有一个问题在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 String,没有任何改变。
ANSWER
那是一个奇怪的。也许有人可以为我清除这一点。我总是问自己,为什么√§在哪里使用,我发现翻译utf-8 ä会导致√§。显然我的android手机没有使用macroman,但我的mac确实如此。我因此改变了eclipse中的文本文件编码,重新启动了eclipse和tomcat服务器并且它工作了。 eclipse中的TCP / IP Monitor仍然使用mac roman,看起来仍然是错误的。这是我的服务器的问题,而不是android上的restlet客户端。我只是看不到它,因为TCP / IP Monitor在macroman中编码了所有内容。
答案 0 :(得分:2)
您是否尝试在StringRepresentation
上拨打setCharacterSet(...)?如,
StringRepresentation sr = new StringRepresentation(form.toString());
sr.setCharacterSet(CharacterSet.UTF_8);