为什么我的服务器会忽略来自Http Post的Umlauts?

时间:2012-04-11 10:51:59

标签: java android utf-8 http-post

我想在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)。

我真的不知道该改变什么:(

0 个答案:

没有答案