我想在Android中实现最初为iOS制作的应用程序。设计已经完成,但现在我尝试让网络任务正常运行。这有点令人困惑。 例如,当新用户注册时。如果他的名字包含变音符号,则这些字符不会上传到我的服务器上的数据库。但在iOS上它可以工作。 每次与我的服务器交互都会发生这种情况。我很确定我将所有内容都转换为utf-8,但可能会忘记什么?
这是帖子的功能:
public static HttpResponse doPost(String url,Map<String, String> kvPairs) throws ClientProtocolException, IOException{
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, "UTF-8");
params.setBooleanParameter("http.protocol.expect-continue", false);
HttpClient httpclient = new DefaultHttpClient(params);
HttpPost httppost = new HttpPost(url);
if (kvPairs != null && kvPairs.isEmpty() == false) {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(kvPairs.size());
String k, v;
Iterator<String> itKeys = kvPairs.keySet().iterator();
while (itKeys.hasNext()) {
k = itKeys.next();
v = kvPairs.get(k);
nameValuePairs.add(new BasicNameValuePair(k, v));
}
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
}
HttpResponse response;
response = httpclient.execute(httppost);
return response;
}
当我在帖子中添加一个值时,我使用以下函数来确保该字符串是utf-8:
kvPairs.put("username", utf8Convert(name);
public static final String utf8Convert(String utf8String) throws
java.io.UnsupportedEncodingException {
byte[] bytes = new byte[utf8String.length()];
for (int i = 0; i < utf8String.length(); i++) {
bytes[i] = (byte) utf8String.charAt(i);
}
return new String(bytes, "UTF-8");
}
即使它不应该是服务器端的问题,在我的PHP脚本中我使用以下行来确保它是utf8:
header('Content-Type: text/html; charset=utf-8');
最后在phpMyAdmin中我将数据库字符集设置为UTF-8(utf8_bin)。
我真的不知道该改变什么:(