Java 为一行乱码的汉字

Java 为一行乱码的汉字,java,encoding,character-encoding,Java,Encoding,Character Encoding,我在一个表中有6列,其中一列包含汉字,我在该表中有200条记录 我已经写了代码来保存一个文本文件。问题是在获取所有记录时,我能够看到文件中的中文文本。但是当我只得到一张唱片时,我发现中文文本是乱七八糟的 我正在使用下面的代码 public static void main(String args[]){ String outputFile = fileNameEncode("C:\\a\a.txt"); FileOutputStream os = new FileOutputStream(out

我在一个表中有6列,其中一列包含汉字,我在该表中有200条记录

我已经写了代码来保存一个文本文件。问题是在获取所有记录时,我能够看到文件中的中文文本。但是当我只得到一张唱片时,我发现中文文本是乱七八糟的

我正在使用下面的代码

public static void main(String args[]){
String outputFile = fileNameEncode("C:\\a\a.txt");
FileOutputStream os = new FileOutputStream(outputFile);
writeToFile(os);
}

private static String fileNameEncode(String name) {
        String file;
        try {
            byte[] utf_byte = name.getBytes("UTF-8");
            StringBuilder sb = new StringBuilder(1024);

            for (byte b : utf_byte) {
                int integer = b & 0xFF; // drop the minus sign
                sb.append((char) integer);
            }
            file = sb.toString();
        } catch (Exception e) {
            file = name;
        }
        return file;
    }

    public void writeToFile(FileOutputStream os) {
    PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(ostream, "GBK")));

        for (int rowNum = 0; rowNum < arrayList.size(); rowNum++) {//arrayList contains data from db
                ArrayList list = arrayList.get(rowNum);

                    for(int k = 0; k < list.size(); k++{
                    String[] data = new String[6];
                        for (int colNum = 0; colNum < 6; colNum++) {
                            data[colNum] = list.get(i).toString();
                        }

                        String outLine = composeLine(data, ctlInfo);                    

                        // write the line
                        pw.print(outLine);
                        pw.println();

            }
            }

}
    private static String composeLine(String[] data, ControlInfo ctl) {
        StringBuilder line = new StringBuilder();
        String delim = ","
        int elemCount = data.length;
        for (int i = 0; i < elemCount; i++) {
            if (i > 0)
                line.append(delim);
           if (data[i] != null && (data[i].contains("\n") || data[i].contains("\r") ||
                    data[i].contains("\r\n"))){
                data[i] = data[i].replaceAll("(\\t|\\r?\\n)+", " ");
            }
            else {
                line.append(data[i]);
            }
        }

        return line.toString();
    }
publicstaticvoidmain(字符串参数[]){
字符串outputFile=filenamencode(“C:\\a\a.txt”);
FileOutputStream os=新的FileOutputStream(outputFile);
写文件(os);
}
私有静态字符串fileNameEncode(字符串名称){
字符串文件;
试一试{
byte[]utf_byte=name.getBytes(“utf-8”);
StringBuilder sb=新的StringBuilder(1024);
for(字节b:utf_字节){
int integer=b&0xFF;//删除减号
sb.追加((字符)整数);
}
file=sb.toString();
}捕获(例外e){
文件=名称;
}
返回文件;
}
public void writeToFile(FileOutputStream os){
PrintWriter pw=新的PrintWriter(新的BufferedWriter(新的OutputStreamWriter,ostream,GBK));
对于(int-rowNum=0;rowNum0)
行。追加(delim);
如果(数据[i]!=null&(数据[i]。包含(“\n”)| |数据[i]。包含(“\r”)||
数据[i]。包含(“\r\n”)){
数据[i]=数据[i].replaceAll(“(\\t |\\r?\\n)+”,”;
}
否则{
行。追加(数据[i]);
}
}
返回行.toString();
}

你能告诉我哪里错了吗?

我发现了问题,代码是好的,问题出在记事本++中。如果node pad++中的字符集是中文(GB2312),那么我就能看到正确的文本。记事本++自动设置了两行GB2312,但对于一行,它没有自动设置为GB2312