Windows 版本 (文件字符集为GBK)
public class Test {        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub           String a = "啊哦额,aa无a";
           System.out.println(a.length());        }}输出为 8 
Linux 版本 (文件字符集:Test.java: ISO-8859 C++ program text) ,操作系统的字符集US_en
public class Test {        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub           String a = "啊哦额,aa无a";
           System.out.println(a.length());        }}输出为 12 ("啊" 占2个字节)
首先linux文件字符集和系统字符集是不可改变的.但可以改程序.我想让linux下a.length的长度跟windows下输出是一样的.另.我需要一个通用的方法 ..谢谢..各位大哥了

解决方案 »

  1.   

    GBK的汉字转成ISO-8859-1的时候是乱码,所以汉字就变成乱码了,而这个时候.length也计算的是字符的个数,一个中文汉字的乱码可能会是多个,所以长度就不会相等了
      

  2.   

    String str = "啊哦额,aa无a";
    try {
    byte[] b = str.getBytes("iso-8859-1");
    String s = new String(b, "gbk");
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
      

  3.   

    byte[] b = str.getBytes("iso-8859-1");这个中的iso-8859-1换成gbk,如果不行,我就不知道咯
      

  4.   


    Linux 版本 (文件字符集:Test.java: ISO-8859 C++ program text)
    问题就出在这个文件字符集
    你文件内的中文全部被作为单字节长度存储,编译的时候是不会知道两个字节在一起要组成一个中文,
    文件本身不可能用gbk字符集对iso-8859-1进行一个encode你找个二进制文本编辑器,看一下gbk字符集的文件打开的样子,比较iso字符集的内容就知道区别了至于解决办法,除了让java文件本身支持多字节以外,貌似没啥其他办法了吧
      

  5.   

    或者你可以试试用同一个class文件在linux下运行,当然要让jvm认识gbk字符集,lz不妨搜一下