String result = "erheih哈哈あいうえお";
try {    
    result = new String(result.getBytes("iso-8859-1"), "JISAutoDetect");
            System.out.println(result);
            
        } catch (UnsupportedEncodingException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
输出的“哈哈あいうえお”是乱码,怎么做才能输出“哈哈あいうえお”?

解决方案 »

  1.   

    你这又是中文简体,又是日语的,最好用Unicode编码,你把它转成这个就行了,对这样的就得用国际标准了。
      

  2.   

    我试过了,用UTF-8打出来也是乱码
      

  3.   

    String中是以Unicode方式保存字符串的,用System.out.println()打印时,会自动转换,不需要人为做其他处理。因此,这样就可以了:String result = "erheih哈哈あいうえお";
    System.out.println(result);
      

  4.   

    楼上说得不错 
    如果是在jsp页面中也是这样吗
      

  5.   

    跟很多有类似问题的人一样,"dljhf(kanawalo)"兄 在概念上是错误的,因此你的问题无从回答。编码问题的帖子回复过很多贴了,可以参考http://community.csdn.net/Expert/topic/4332/4332512.xml?temp=.5229303
    http://community.csdn.net/Expert/topic/4319/4319278.xml?temp=.4199793
    http://community.csdn.net/Expert/topic/4357/4357817.xml?temp=.7974512
    另外,我写过一个资料:http://www29.websamba.com/sswater/docs/coding.zipzip 文件中是一个 ppt,里面的内容看上去很少,但是那是一边看我一边给大家讲的,每一句话都可以展开来说的。因此,你需要对每一句话都要读仔细,你将能够对“字节”“字符”“编码”从此不再迷惑。
      

  6.   

    谢谢!,sswater(光杆兵):
    有一个问题:
    在使用GB2312的程序中,通常采用EUC储存方法,以便兼容于ASCII。
    每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”,第二个字节称为“低位字节”。
    “高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)。
    例如“啊”字在大多数程序中,会以0xB0A1储存。(与区位码对比:0xB0=0xA0+16,0xA1=0xA0+1)。
    这里的“0xA1”叫做什么?是一个字节吗?它也是存储在计算机中的吗?
      

  7.   

    这样的,因为本来内存中的字符是UNICODE类型的,你用ISO-8859-1解码会将双字节的字解析成两个字,但是这样的两个字在Java中存储的时候仍然使用两个字节存储,也就是说原来的两个字节,现在变成了4个字节,所以输出的时候就肯定出错了!大家一起讨论,不对还请大家指正!
      

  8.   

    dljhf (kanawalo) 兄,如果你看过我写的文档,我想你应该注意到我反复给别人强调的一句话:把 "字符(也就是符号,抽象概念)" vs "字节(8位二进制)" 两个概念区分开来。之间的转换就是根据某种编码规则。“0xA1”叫做什么?
    ---- 字节"啊"(符号) 存为 0xB0A1 这2个字节是按照 GBK 编码转化而来的。使用 ShiftJIS 编码会得到另外2个字节。
      

  9.   

    谢谢大家!谢谢sswater(光杆兵) !