java - csv 中不显示中文文本

标签 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, 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;
                    }
                }
            });
        } 
    }

这里我将文件编码作为GBK传递。 假设我在 clob 中的文件包含中文文本“记录”,但是它显示为“1/4”。我希望如果我以 Excel 格式打开 csv 文件,它应该是中文文本。如果文件包含带有一些*(如*ABC)的 header ,则应对其进行格式化。

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

是否可以使用GBK编码?

最佳答案

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

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

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

关于java - csv 中不显示中文文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46501887/

相关文章:

java - 将对象传递到数据库时,调试器说属性有变量,但是当打印 result.hasErrors 时,它是 null

java - Spring MVC JSP 应用程序的 WAR 目录结构?

java - 在 Heroku 环境中使用 ResourceUtils.getFile 从类路径中读取文件

excel - 如何创建制表符分隔的 CSV?

java - 为什么 Apache Spark 在客户端执行过滤器

java - iText 7 HTML 到 PDF 转换

java - 有没有办法解决局部变量可能尚未初始化的问题

java - 在java中解析直到字符串末尾并检查行尾

python - Pandas :从数据框中删除以字母开头的行并保存 CSV

arrays - 在 JMeter 中从 CSV 文件传递​​数组