我有一个数据类型为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 ?
答案 0 :(得分:0)
当您阅读此clob.getCharacterStream()
时,问题似乎正在变化 - 这将使用默认平台编码返回字符。您需要使用适当的编码来读取它。试试这个:
InputStream inputStream = clob.getAsciiStream();
Reader reader = new InputStreamReader(inputStream, encoding);
这应该可以解决你的问题。