我有一个应用程序可以检索用户的数据,例如名称,并通过Web服务将其发送到远程数据库。 我正面临着特殊口音的问题,比如这个名字'Tağıyeva'
名称在数据库中存储为Ta?ıyeva。
这是我用来发送数据的原因
static String postData(List<NameValuePair> nameValuePairs, String url) {
InputStream ips = null;
try {
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters);
HttpPost httppost = new HttpPost(MyInternetManager_Class.url+url);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
ips = response.getEntity().getContent();
String contentAsString = isToString(ips);
if (MyInternetManager_Class.debug) Log.e("recu",contentAsString);
if (response.getStatusLine().getStatusCode() != 200 || contentAsString.length() == 0) return "-1"; // erreur serveur
else return contentAsString;
}
catch (IOException e) {
//...
}
finally {
try {if (ips != null) ips.close();} catch (IOException e){}
}
}
正如你所看到的,我已经让默认的字符集(它是哪一个?)。我的服务器设置为UTF-8。如何解决问题?
更新:现在我收到的JSON看起来像这样 “名字”:“Nh \ u00e1 \ u00ba \ u00adt Pi \ u00e1 \ u00bb \ u00aba \ u00c4 \ u009f \ u00c4 \ u00b1yeva” 我用它来将InputStream转换为String
static String isToString(InputStream stream) {
Scanner s = new Scanner(stream, "UTF-8").useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
但字符串未正确显示。 代替'NhậtPiừnTağıyeva' 如何解决?
由于
答案 0 :(得分:1)
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
我希望这会对你有所帮助。
答案 1 :(得分:1)
根据这些文档,您使用的UrlEncodedFormEntity构造函数默认为ISO-8559-1 charset。您可以(并且看起来应该)将UTF-8作为第二个参数传递:
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs),"UTF-8");
答案 2 :(得分:0)
数据格式是JSON,我没有提及(以及Thanatos已经假设的)。使用 Android的JSON解析器会自动正确解码字符。在几个层面上解析JSON本身显然是一个愚蠢的想法。