解决方案 »

  1.   

    你字符串本身是否是UTF-8的? 看看是否是GBK的。
      

  2.   

    之前Eclipse的编码是GBK的
    后来改成utf-8依然不起作用
      

  3.   


    服务器端的编码就是utf-8
      

  4.   

    debug看下服务器端接收到的时候是什么状态,才看到,你post字符串是很难解决,不如post一个json就可以了,
      

  5.   


    我的json是类似下面这种格式
    {“weather”:[{"id":"330334",“name”:"aaa"},{"id":"330335",“name”:"bbb"}]
    不好用new BasicNameValuePair
    我是用gson转的字符串 然后在post.setEntity(new StringEntity(params,"UTF-8"));
    不知有更好的办法post json没
      

  6.   

    URL url = new URL("http://localhost:8080/PaymentService/card/add");
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setRequestMethod("POST");
    con.setRequestProperty("Content-Type", "application/json");
    con.setDoInput(true);
    con.setDoOutput(true);
    OutputStream os = con.getOutputStream();
    OutputStreamWriter writer = new OutputStreamWriter(os, "UTF-8");
    writer.write(str);
    writer.flush();
    writer.close();
    InputStream is = con.getInputStream();
    BufferedReader isr = new BufferedReader(new InputStreamReader(is));
    System.out.println(isr.readLine());
      

  7.   

    问了服务器那边几次了 一直说是用utf-8读的
    说ios用utf-8提交中文没问题
      

  8.   

    像你这种情况,只能用最后一招了,
    在提交之前把字符串转化成国际化编码(unicode),服务器接口接收数据后再转回来,
    /**
     * 将字符串转化成国际化编码
     * @param str 要操作的字符串
     * @return String
     * */
    public static String toUnicode(String str) {
    if (isBlank(str)) {
    return "";
    }
            char[] array = str.toCharArray();
            int value = 0;
            String result = "";
            for (int i = 0; i < array.length; i++) {
             value = (int) str.charAt(i);           
                if (value <= 256) {
                 result += "\\u00" + Integer.toHexString(value);
                }else{
                 result += "\\u" + Integer.toHexString(value);
                }
            }
            return result;
        }

    /**
     * 把国际化编码转成中文(字符串)
     * @param str 要操作的国际化编码
     * @return String
     */
    public static String deUnicode(String str) {
    if (isBlank(str)) {return "";}
    char aChar;
    int len = str.length();
    StringBuffer outBuffer = new StringBuffer(len);
    for (int x = 0; x < len;) {
    aChar = str.charAt(x++);
    if (aChar == '\\') {
    aChar = str.charAt(x++);
    if (aChar == 'u') {
    int value = 0;
    for (int i = 0; i < 4; i++) {
    aChar = str.charAt(x++);
    switch (aChar) {
    case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':
    case '9':value = (value << 4) + aChar - '0';break;
    case 'a':case 'b':case 'c':case 'd':case 'e':
    case 'f':value = (value << 4) + 10 + aChar - 'a';break;
    case 'A':case 'B':case 'C':case 'D':case 'E':
    case 'F':value = (value << 4) + 10 + aChar - 'A';break;
    default:throw new IllegalArgumentException("Malformed      encoding.");
    }
    }
    outBuffer.append((char) value);
    } else {
    if (aChar == 't') {
    aChar = '\t';
    } else if (aChar == 'r') {
    aChar = '\r';
    } else if (aChar == 'n') {
    aChar = '\n';
    } else if (aChar == 'f') {
    aChar = '\f';
    }
    outBuffer.append(aChar);
    }
    } else {
    outBuffer.append(aChar);
    }
    }
    return outBuffer.toString();
    }

    public static void main(String[] args) {
    String unicode = toUnicode("我就不信了,这样还是乱码");
    System.out.println("这就是国际化编码:\t" + unicode);
    System.out.println("再转回来:\t" + deUnicode(unicode));
    }
    运行这个main方法后,控制台输出:这就是国际化编码: \u6211\u5c31\u4e0d\u4fe1\u4e86\uff0c\u8fd9\u6837\u8fd8\u662f\u4e71\u7801
    再转回来: 我就不信了,这样还是乱码
    这样是绝对能解决乱码问题的,就是有点麻烦,你自己掂量吧
      

  9.   

    其实我想问下,你项目的编码是不是utf-8