用的oracle資料庫,用pl/sql developer寫存盤程序。要打開本地檔案,但是輸出的中文出現亂碼,客戶端和資料庫編碼一致中文都沒有問題,我將txt檔案編碼轉成UTF8在輸出中能正常顯示中文,但是因為檔案太多不能逐個轉換編碼,資料庫還有其他用途也不能修改數字集,所以求大神有沒有什么辦法在存盤程序中實作臨時的編碼的轉換,檔案編碼都是GB2312的。代碼如下
DECLARE
fhandle utl_file.file_type;
fp_buffer VARCHAR2(4000);
file_name CLOB;
i INT;
BEGIN
--file_name := '1.txt';
fhandle := utl_file.fopen('WENSI_PRO', '1.txt', 'R');
file_name := NULL;
i := 0;
WHILE i <= 5 LOOP
utl_file.get_line(fhandle, fp_buffer);
file_name := file_name|| chr(13) || fp_buffer;
IF fp_buffer = 'exit($ret);' THEN
EXIT;
END IF;
i := i + 1;
END LOOP;
dbms_output.put_line(i);
dbms_output.put_line(file_name);
utl_file.fclose(fhandle);
END;
uj5u.com熱心網友回復:
問題原因已經很明顯了:資料庫和檔案字符集不一致解決方法也只有:
1.改資料庫字符集, 這個不建議。
2.改檔案字符集,目前最好的版本也只有這個。GB2312改成UTF-8
你可以把所有檔案名保存到一個臨時表中,然后用回圈: for rec in(select filename from 臨時表)
打開的時候使用:utl_file.fopen('WENSI_PRO', rec.filename, 'R'); 即可。
uj5u.com熱心網友回復:
這個辦法也是我現在實作的方法uj5u.com熱心網友回復:
既然可用,就用著吧。
uj5u.com熱心網友回復:
但是從資料源傳的檔案都是GB2312的,每天都挺多檔案的,一次次手工轉碼作業量大uj5u.com熱心網友回復:
這個就不是資料庫的問題了,要求源系統轉碼。
傳送過來的時候,檔案轉成UTF-8再下發給你。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/81523.html
標籤:開發
