€ = 0x80我的系统是Win2K的,字符集应当是GBK的吧,JVM没做什么设置,应当是Unicode的,应用服务器是Jboss3.0.8带Jetty的,据说是ISO-8859-1的西文字符集。症状:写了个简单的BufferedReader,readLine进来,getByte,发现€算1个byte,Sysout出来个?。但是如果把€写在java源程序里,不但不认,还会把后面1个字符吃掉,比如
String str = "€";
编译通不过,因为javac找不到后面的引号了(why?????)
在jboss里写了个MBean,发现如果有€的行,byte数会少1个,比如"€1234",就变成"?234"了,由于我要做平文件解析,需要按byte数来截字符串,所以这是个很严重的问题,望达人解惑。

解决方案 »

  1.   

    但是如果把€写在java源程序里,不但不认,还会把后面1个字符吃掉,比如
    String str = "€";
    编译通不过,因为javac找不到后面的引号了(why?????)
    在jboss里写了个MBean,发现如果有€的行,byte数会少1个,比如"€1234",就变成"?234"了---------------------
    编码GB2312无法转换某些特殊字符!
    <%@ page contentType="text/html;charset=GB2312"%><%String test="€";%> €不能被GB2312接受<%@ page contentType="text/html;charset=UTF-8"%><%String test="€";%>用utf-8就行了
      

  2.   

    to jihanzhong(逍遥) :
    但是我的文件里还有中文字符,所以必须用gb2312啊,关键是€会带掉1个字符,使得我无法正常判断字符串的长度,如"€1234我",应当是7个byte,结果在JBoss里变成"?234我"只剩6个字符了
      

  3.   

    to jihanzhong(逍遥) :
    但是我的文件里还有中文字符,所以必须用gb2312啊,关键是€会带掉1个字符,使得我无法正常判断字符串的长度,如"€1234我",应当是7个byte,结果在JBoss里变成"?234我"只剩6个字符了
    ——————————————————————————————————
    utf-8可以用中文字符啊!
      

  4.   

    try {
    String temp;
    byte[] temp_byte = str.getBytes("ISO8859-1");
    temp = new String(temp_byte, "GBK");
    return temp;
    } catch (Exception e) {
    return null;
    }
      

  5.   

    to jihanzhong(逍遥) :
    还是不成啊,我用BufferedReader+FileReader读文件,readLine读进1行,需要判断这行的字节数,getBytes()后,如果此行里有1个€,byte数组的长度就会少1。而且我在命令行里运行不会有这个问题,只有在JBoss里才会有这个问题。改用UTF-8后,byte数组的长度加了1,-_-b