俄语字符的缓冲区读取器编码字符集

时间:2018-08-15 17:52:55

标签: java linux

当前,我们面临一些问题,其中俄语字符已转换为垃圾数据,垃圾数据在记事本中被视为矩形。下面是我们正在使用的代码,这些代码正在具有Java 1.8的Linux服务器上执行

1 1
2 2
3 3
4 4
5 5

之前使用相同的代码在Java 1.6的AIX环境中工作。

任何人都可以给我提示可能出问题的地方。由于似乎没有进行任何代码更改,因此这似乎完全是环境问题。

2 个答案:

答案 0 :(得分:0)

尝试一下

    BufferedReader buff= new BufferedReader(
       new InputStreamReader(
                  new FileInputStream(fileDir), "UTF-8"));

编辑

确保文件另存为UTF-8 see this image

答案 1 :(得分:0)

您的代码似乎正在将整个文件读取为字节数组。可以通过以下方式完成:

static byte [] GetFileBytes (String filename) 
    throws java.io.FileNotFoundException,
           java.io.IOException {
    java.io.File f= new java.io.File (filename);
    java.io.FileInputStream fi= new java.io.FileInputStream (f);
    long fsize = f.length ();
    byte b [] = new byte [(int)fsize];
    int rsize= fi.read (b, 0, (int)fsize);
    fi.close ();
    if (rsize!=fsize) {
        byte [] btmp= new byte [rsize];
        System.arraycopy (b, 0, btmp, 0, rsize);
        b= btmp;
    }
    return b;
}

或者,在您的代码中,您可以选择一种编码,并在两次转换中都使用它:

static byte [] GetFileByteArray (String filename)
    throws Exception {
    String cset= "ISO-8859-1"; /* any one-byte encoding */
    java.io.BufferedReader buff=
        new java.io.BufferedReader
            (new java.io.InputStreamReader
                (new java.io.FileInputStream(filename), cset));
    String line;
    StringBuffer result= new StringBuffer ();
    while((line=buff.readLine())!=null)
    {
        result.append(line).append('\n');
    }
    return result.toString().getBytes(cset);
}