Oracle使用sqlldr load匯入txt出現中文亂碼

宅男攻城獅發表於2014-07-02

Oracle使用load操作出現中文亂碼問題

Oracle經常會出現中文亂碼問題,首先確定Oracle伺服器端的字符集看這個字符集是否與你客戶端的字符集相同。查詢Oracle伺服器端字符集的命令是select * from nls_database_parameters,客戶端字符集select * from nls_instance_parameters,要保證這兩個字符集市相同的。如果不相同可以在網上找到教程我在這裡不再贅述。下面介紹另一種情況txt文字字符集為utf-8導致的匯入中文亂碼問題。
導致中文亂碼原因在於txt的字符集不是gbk,首次嘗試是在load中的.ctl檔案中新增在load data後面新增CHARACTERSET ZHS16GBK將輸入轉成gbk,但是由於txt本身的問題導致這個方法失效,所以我嘗試直接將utf-8的格式轉變成其他格式,發現轉變成ANSI成功匯入切沒有亂碼。下面提供一個利用notepad++將utf-8的txt轉換成ANSI批量轉換的方法。
1.此方法需要安裝notepad++英文版(中文版我使用失敗你也可以試試其他方法)
2.此方法需要在notepad上安裝python script外掛選擇plugins-》選擇plugins manager-》選擇show plugins manager在其中找到python script安裝
3.使用plugins-》python script-》new script編寫如下程式碼:
import os;
import sys; 
filePathSrc="F:\\TELECOM\\" # 需要批量轉換的資料夾
for root, dirs, files in os.walk(filePathSrc): 
for fn in files: 
if fn[-4:] == '.txt': # 要轉換的型別
notepad.open(root + "\\" + fn) 
notepad.runMenuCommand("Encoding", "Convert to ANSI") #轉換成ANSI
notepad.save()
notepad.close()
編寫完成後儲存為utf2ansi.py
4.使用plugins-》python script-》script選擇你儲存的utf2ansi執行即可

相關文章