中文文本没有在csv中显示

时间:2017-09-30 10:31:50

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

这里我传递的fileEncoding为 GBK 。 假设我在clob中的文件包含中文文本记录,但它显示为¼Ç¼。我想如果我以excel格式打开csv文件它应该是中文文本。如果文件包含带有* * ABC的标题,则应格式化。

我尝试将编码更改为UTF-8,但没有运气。

是否可以编码 GBK

1 个答案:

答案 0 :(得分:0)

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

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

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