如图:没太明白,之前没遇到过,今天重写了一个servlet,便出现这个问题了,莫名其妙...

解决方案 »

  1.   

    dos.writeUTF(queryResult);
    这个方法会先写两个字节到输出流,这个两个字节的内容就是实际所写的的字节数。
    应该是这两个字节做的怪。
      

  2.   

    package defaultpackage;import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;public class Test { public static void main(String[] args) {
    String s = "中国";

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baos);
    try {
    dos.writeUTF(s);
    } catch (IOException e2) {
    e2.printStackTrace();
    }

    byte[] b = null;
    try {
    b = s.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e1) {
    e1.printStackTrace();
    }
    try {
    System.out.println(new String(b,"UTF-8"));
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }

    }
    }我试了下,没有你说的这种情况出现啊。
    应该是你程序本身的问题。
    建议把打印的位置换一换,比如说刚转换完毕后马上打印,看看结果,就能知道是在哪个环节出了问题
      

  3.   

    writeUTF
    public final void writeUTF(String str)throws IOException
    以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。 
    首先,通过 writeShort 方法将两个字节写入输出流,表示后跟的字节数。该值是实际写出的字节数,不是字符串的长度。根据此长度,使用字符的 UTF-8 修改版编码按顺序输出字符串的每个字符。如果没有抛出异常,则计数器 written 增加写入输出流的字节总数。该值至少是 2 加 str 的长度,最多是 2 加 str 的三倍长度。 
      

  4.   


    借用一下你的demo:public static void main(String[] args) throws Exception{
            String s = "中国";
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            DataOutputStream dos = new DataOutputStream(baos);
            dos.writeUTF(s);     
            byte[] b = baos.toByteArray();
            for(int i=0;i<b.length;i++){
             System.out.println(Integer.toHexString(b[i]));
            }
            System.out.println(">>>"+new String(b,"UTF-8")+"<<<");        
            System.out.println("--------------------");
            byte[] b2 = s.getBytes("UTF-8");
            for(int i=0;i<b2.length;i++){
             System.out.println(Integer.toHexString(b2[i]));
            }
        }
      

  5.   

    我也遇到过
    后来该成writeBytes了。