我们在oracle 10g db中存储了包含法语字符集的数据。要求是使用Java读取数据并生成输出文件。
我通过SQL * plus检查了Oracle数据库中数据的有效性,看起来很不错。
来自windows:
set NLS_LANG=AMERICAN.AL32UTF8
sqlplus scott/tiger
sql> select billing_address from MYTABLE t where ADDRESS_ID=1 ;
billing_address
-----------------------
MONTRÉAL QUÉ
现在,当我从Java读取表格以生成输出文件时,该字符全部出现乱码,我看到问号代替É。
当我尝试用Java读取/写入数据时,是否需要设置任何特殊编码。
使用ojdbc14.jar
并将编码设置为UTF-8。
更新:这是我的java代码段。
Charset cs1 = Charset.forName("UTF-8");
PreparedStatement pStmt = conn.prepareStatement("select * from talbe where address_id=1");
ResultSet rs = pStmt.executeQuery();
Writer w = null;
FileOutputStream fos = null;
if(rs.next()) {
String billingaddress = rs.getString("BILLING_ADDRESS");
fos = new FileOutputStream(new File("myout.dat"));
w = new BufferedWriter(new OutputStreamWriter(fos,cs1));
w.write(billingaddress);
}
答案 0 :(得分:4)
要检查的几件事......
?useUnicode=true&characterEncoding=utf8
答案 1 :(得分:1)
实际上问题在于将数据加载到oracle数据库时设置的初始字符集。我们在sql * loader控制文件中更改了charset,现在工作正常。