我有一个数据类型为 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/