PL/SQL DEV utf8亂碼問題 utf8 bom

字符集信息:linux

    數據庫字符集:al32utf8sql

    本地客戶端字符集:utf8數據庫

    plsqldev默認文件編碼:utf8無bom --本身設置的,默認是自動識別
oracle


問題:ide

    經過plsqldev導出某表數據爲sql文件,經過plsqldev打開後,發現中文亂碼。
工具


分析:測試

    首先用notepad++打開sql文件,無亂碼,看了下文件字符編碼,是utf8無bom。編碼

    然後檢查了數據庫字符集與本地oracle客戶端字符集設置,均爲utf8。
spa

    遂懷疑是plsqldev工具字符編碼識別問題,將文件轉換爲utf8含bom,再用plsqldev打開,無亂碼。
unix

    可目前utf8含bom格式放在unix、linux環境上容易出現問題,因此改文件編碼的方案就放棄了。

    偶然發現另外一個一樣是utf8無bom的sql文件用plsqldev打開沒有亂碼,遂比較下,發現後者第一條sql語句中含中文,而前者是在50條之後才含有中文。

    會不會是plsqldev工具按中文出現的位置去識別utf8是否含bom?

    測試下,把第一個sql文件中含中文的sql語句放到第一條,用plsqdev打開,果真,無亂碼!

    那麼,含中文的sql語句只能放在第一行才能無亂碼?

    驗證下,把含中文的sql放到第三行,無亂碼;放到第10行,無亂碼;放到第20行,亂碼了。

    有沒有更簡單的方式?emmm,給這個sql文件第一行加一箇中文註釋試試,結果ok,無亂碼。


推測:

    plsqldev打開utf8文件,以中文出現的位置來判斷此文件是否含bom,即前n行或前n個字符內沒有出現中文,則認爲此文件爲utf8含bom。


解決方案:

    在utf8無bom格式文件第一行加個中文註釋便可。


未結:

    具體是之前n行仍是之前n個字符做爲判斷條件,目前本人還沒有驗證,僅僅爲推測。

相關文章
相關標籤/搜索