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

















