利用ASP.NET查出Oracle數(shù)據(jù)庫中文亂碼問題
把這兩天兩次安裝IBM2650服務(wù)器中出現(xiàn)的問題做一個總結(jié):
1、***次安裝,用IBM的引導(dǎo)盤引導(dǎo),按步就班的下來,選擇語言,做Raid5,選擇Windows系統(tǒng)等等。安裝好Windows2003企業(yè)版之后,再去安裝Oracle時,安裝到一半時,提示不能創(chuàng)建快捷方式。取消,再安裝還是不能創(chuàng)建快捷方式,就那樣安裝上了。安裝之后Oracle運(yùn)行倒也正常,導(dǎo)入數(shù)據(jù),發(fā)現(xiàn)中文變成了亂碼。
再安裝editplus和winrar發(fā)現(xiàn)顯示窗口的中文也是亂碼,右鍵菜單上的部分中文是亂碼。在網(wǎng)上搜了一下,原來是Windows選擇的字符集不對,在控制面板-語言修改成中文后,右鍵菜單上的中文正常顯示了,查看Oracle數(shù)據(jù)庫里的中文,也正常了。按說,到這里問題也就解決了,應(yīng)該結(jié)束了??墒桥渲蒙螦SP.NET網(wǎng)站之后,發(fā)現(xiàn)查詢出來Oracle數(shù)據(jù)庫中的中文,在網(wǎng)頁上顯示為亂碼。
2、于是開始了解決Oracle數(shù)據(jù)庫中中文在ASP.NET網(wǎng)頁上顯示為亂碼的過程。在網(wǎng)上搜,絕大多數(shù)說是Oracle字符集的問題,可我覺得,用plsql developer查看中文正常,應(yīng)該不是Oracle字符集的問題。下班了,晚上回去繼續(xù)找,還是沒有找到有效的解決辦法。寫了三個查看Oracle數(shù)據(jù)庫中中文的小程序,一個是用VB6寫成的,一個用.NET寫成的Winform程序,一個用.NET寫成的webform程序。同時計劃比較服務(wù)器上的Oracle的字符集和和本機(jī)上的Oracle的字符集。
第二天,先運(yùn)行VB6程序,顯示Oracle數(shù)據(jù)庫的中文正常,再運(yùn)行.NET Winform程序Oracle數(shù)據(jù)庫中的中文是亂碼,運(yùn)行.NET webform程序,Oracle數(shù)據(jù)庫中的中文也是亂碼。初步判斷是.NET的字符集不正常。于是找怎么修改.NET的字符集的問題,找了半天也無找到有說.NET字符集的問題,可能不是.NET字符集的問題。
于是就查看了Oracle的字符集,結(jié)果發(fā)現(xiàn)服務(wù)器上的Oracle的字符集和我機(jī)器上的Oracle的字符集還真的不一樣:我機(jī)器上的Oracle的字符集是中文NLS_CHARACTERSET:ZHS16GBK,而服務(wù)器上的字符集是:WE8MSWIN1252。那就想辦法修改Oracle的字符集吧,可是由于對Oracle不是很熟悉,弄了老大一會也沒有沒有弄好,想把Oracle卸載了重裝,結(jié)果不小心把系統(tǒng)也搞出了一些毛病,干脆重裝了系統(tǒng),注意了那些問題,安裝之后也就一切OK。
3、分析:
1)安裝Oracle時不能創(chuàng)建快捷方式,及安裝其他程序也不能創(chuàng)建快捷方式,并且安裝過程中窗口上中文是亂碼,右鍵菜單上的部分中文是亂碼,這個原因是Windows沒有設(shè)置成中文,也就是在IBM的引導(dǎo)盤安裝的過程中,不熟悉,沒有注意選擇正確的時區(qū),正確的字符集造成的。
2)VB6程序顯示的Oracle中文字符正常,而.NET顯示的Oracle中文為亂碼的原因應(yīng)該是它們的機(jī)制不同造成的:VB6用的是oledb,它可能使用Oracle本身的字符集原樣的顯示了Oracle中的字符;而.NET用的是另外的一種機(jī)制,它要把Oracle中字符進(jìn)行轉(zhuǎn)換后再顯示出來。(這只是我分析,沒有找到證據(jù))
【編輯推薦】