Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java csv中未显示中文文本_Java_Spring_Csv_Encoding - Fatal编程技术网

Java csv中未显示中文文本

Java csv中未显示中文文本,java,spring,csv,encoding,Java,Spring,Csv,Encoding,我有一个数据类型为clob的数据库列,它包含一个包含英文和中文文本的文件,当使用toad打开此clob时,我可以看到中文文本 但是,从我的应用程序下载时,中文文本是乱码的 下面是我的csv格式下载代码 public void read(final String outputFile, final String fileEncoding, long Id) throws Exception { try { template.query(QUERY, Id,

我有一个数据类型为clob的数据库列,它包含一个包含英文和中文文本的文件,当使用toad打开此clob时,我可以看到中文文本

但是,从我的应用程序下载时,中文文本是乱码的

下面是我的csv格式下载代码

public void read(final String outputFile, final String fileEncoding, long Id) throws Exception {
        try {
            template.query(QUERY, Id, new ResultSetExtractor<Void>() {
                @Override
                public Void extract(ResultSet resultSet) throws SQLException {
                    String encoding = fileEncoding == null ? Charset.defaultCharset().name() : fileEncoding;
                    try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), encoding))) {
                        if (resultSet.next()) {
                            Clob clob = resultSet.getClob(1);
                            try (BufferedReader reader = new BufferedReader(clob.getCharacterStream())) {
                                char[] buffer = new char[1];
                                int length = 0;
                                while (true) {
                                    length = reader.read(buffer, 0, 1);
                                    if (length == -1)
                                        break;
                                    writer.write(buffer);
                                }
                            }
                            writer.flush();
                        }
                        return null;
                    } catch (Exception e) {
                        e;
                    }
                }
            });
        } 
    }
public void read(最终字符串输出文件、最终字符串文件编码、长Id)引发异常{
试一试{
query(query,Id,newresultsetextractor(){
@凌驾
公共无效提取(ResultSet ResultSet)引发SQLException{
字符串编码=fileEncoding==null?Charset.defaultCharset().name():fileEncoding;
try(BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile),encoding))){
if(resultSet.next()){
Clob Clob=resultSet.getClob(1);
try(BufferedReader=new BufferedReader(clob.getCharacterStream())){
char[]buffer=新字符[1];
整数长度=0;
while(true){
长度=读卡器读取(缓冲区,0,1);
如果(长度==-1)
打破
writer.write(缓冲区);
}
}
writer.flush();
}
返回null;
}捕获(例外e){
E
}
}
});
} 
}
这里我传递的文件编码是GBK。 假设我的clob文件包含中文文本记录 但是,它显示为¼。我想如果我以excel格式打开csv文件,它应该是中文文本。如果文件包含带有一些*like*ABC的头文件,那么应该对其进行格式化

我试图将编码更改为UTF-8,但没有成功


编码GBK是否可能?

当您阅读此
clob.getCharacterStream()
-将使用默认平台编码返回字符时,问题似乎出现了。您需要使用适当的编码来读取它。试试这个:

InputStream inputStream = clob.getAsciiStream();
Reader reader = new InputStreamReader(inputStream, encoding);

这应该可以解决您的问题。

当您阅读此
clob.getCharacterStream()
-将使用默认平台编码返回字符时,问题似乎出现了。您需要使用适当的编码来读取它。试试这个:

InputStream inputStream = clob.getAsciiStream();
Reader reader = new InputStreamReader(inputStream, encoding);

这应该可以解决您的问题。

它不起作用,它使用编码GBK提供一些不同的文本。有没有办法使用GBK?从CLOB读取时,编码应该与数据库中使用的编码匹配。听起来您在读和写时使用相同的编码,但是您需要一个用于读(匹配存储内容),一个用于写入输出。实际上,在存储到CLOB时,我们从文本文件中提取数据并存储到CLOB,在存储到db时,我们使用GBK编码。但是,如果我们使用相同的GBK编码,那么在从数据库中读取时,中文文本显示不正确。它不起作用,它使用GBK编码给出了一些不同的文本。有没有办法使用GBK?从CLOB读取时,编码应该与数据库中使用的编码匹配。听起来您在读和写时使用相同的编码,但是您需要一个用于读(匹配存储内容),一个用于写入输出。实际上,在存储到CLOB时,我们从文本文件中提取数据并存储到CLOB,在存储到db时,我们使用GBK编码。但是,如果我们使用相同的GBK编码,那么在从db读取时,中文文本无法正确显示。