req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
if (req.getPart("photo") != null
&& req.getPart("photo").getSize() != 0) {
Part pt = req.getPart("photo");
        HttpURLConnection conn = (HttpURLConnection) new URL(HTTPURL + servlet).openConnection();
        conn.setConnectTimeout(5 * 1000);
conn.setRequestMethod(HTTP_METHOD_POST);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("contentType", "utf-8");
conn.setRequestProperty("Content-type", "multipart/form-data;boundary=" + BOUNDARYSTR);
conn.connect();
//PrintWriter out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(),"utf-8")); 
BufferedOutputStream out = new BufferedOutputStream( conn.getOutputStream());
     Map postMap = new HashMap<String, String[]>();
     postMap.putAll(req.getParameterMap());
     postMap.remove("photo");
StringBuilder sb = new StringBuilder();
Iterator iter = postMap.entrySet().iterator();
Iterator<String> it = postMap.keySet().iterator();
while (iter.hasNext()) {
String str = it.next();
Map.Entry me = (Entry) iter.next();
String[] varr = (String[]) me.getValue();
sb.append(BOUNDARY);
System.out.println(Arrays.toString(varr));
sb.append("Content-Disposition:form-data;name=\"");
sb.append(me.getKey());
sb.append("\"\r\n\r\n");
sb.append(URLEncoder.encode(varr[0], "UTF-8"));
sb.append("\r\n");
}
out.write(sb.toString().getBytes());这里打印出来的中文是???,如果我打印URLEncoder.encode(varr[0], "UTF-8")他就使乱码,目测但是这里的这个varr,在debug时能看到他正常的中文值,求解,怎么弄才能不乱码,java;中文;乱码;j2ee

解决方案 »

  1.   

    URLEncoder.encode(varr[0], "UTF-8")换成new String(varr[0].getBytes("iso8859-1","utf-8"))
      

  2.   

    out.write(sb.toString().getBytes());
    out.write(sb.toString());直接在页面打印字符串即可,干嘛还要转换字节额
      

  3.   

    因为这个BufferedOutputStream只能输出二进制流,不是打印在页面上,是传给另一个服务器
      

  4.   

    怎么没人来帮个忙啊 我了个去 我都搞了一下午了 tmd
      

  5.   

    这个地方 不知道你是调用的servlet中的 get还是post 被你调用的那个里面必须写response.setCharacterEncoding("UTF-8");,即使有些时候你调用get 再让get去用post依然存在乱码
      

  6.   

    我在最开始的地方就写了这个编码了,没有用,顺便问下,我的系统居然用System.out.println("中文");打印出来是???,网上搜了,各种说法,您有没有什么意见,但是我觉得者至少也不应该影响这里输出的字符啊,传到对方服务器后也是乱码,蛋疼了
      

  7.   

    结贴了,正确的解决方法是out.write(sb.toString().getBytes(“UTF-8”));
    在这里加上编码就行了