oracle导入excel乱码,Oracle导出的文件为什么用Excel打开是乱码?
Oracle導出的文件為什么用Excel打開是亂碼?
1問題現象
Oracle字符集是AL32UTF8,查詢表中的非英文字符顯示正常,但是用utl_file寫到CSV文件用Excel打開是亂碼。
2問題分析
首先可以肯定:
(1)utl_file寫文件是按照二進制輸出,不會改變數據的編碼,它不受環境變量NLS_LANG控制。
(2)數據庫中的數據是正常的。
那么,Excel錯誤很可能是Excel本身的問題,測試下用Notepad++打開文件,顯示正常,顯示格式為UTF8無BOM格式。
如果用Notepad++把文件轉換成UTF8格式,即加上BOM,再用Excel打開就是正常的了。
這說明,Excel不能自動識別UTF8無BOM格式,而utl_file寫文件又不會自動寫入BOM頭(EFBBBF),從而導致了亂碼。
3解決方案
如果需要utl_file導出的UTF8格式的文件用Excel打開沒有亂碼,可以在文件頭加上BOM,在Oracle中可以用chr(15711167)表示。示例代碼如下:
create or replace proceduref_exportdata_ronghe_201209
(
str_in_sql in varchar2,
str_in_filename in varchar2,
str_o_error out varchar2,
i_o_result out integer
)
as
cur_l_result pkg_type.refcur;
str_l_revord varchar2(4000);
v_file_handle utl_file.file_type;
begin
v_file_handle := utl_file.fopen(‘DATA_POMP_DIR’,str_in_filename, ‘W’);
i_o_result := 1;
utl_file.put(v_file_handle,chr(15711167));
open cur_l_result for str_in_sql;
loop
fetch cur_l_result intostr_l_record;
exit when cur_l_result % notfound;
utl_file.put_line(v_file_handle,str_l_record);
end loop;
close cur_l_result;
utl_file.fclose(v_file_handle);
return;
exception
when others then
str_o_error := substr(sqlerrm, 1,2000);
i_o_result := 0;
return;
end f_exportdata_ronghe_201209;
總結
以上是生活随笔為你收集整理的oracle导入excel乱码,Oracle导出的文件为什么用Excel打开是乱码?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 修改AlertDialo
- 下一篇: Apache 支持ipv6 安装及常见问