亂碼問題:
(1)服務器端:
修改httpd.conf (在Redhat中放置的位置為/etc/httpd/conf/)
查找:
AddDefaultCharset ISO-8859-1
改成:
#AddDefaultCharset ISO-8859-1
AddDefaultCharset off
這種方式關掉了服務器的默認語言的發送,這樣僅憑html文件頭中設置的語言來決定網頁語言。
很多文章都說通過修改為 AddDefaultCharset GB2312 把缺省語言改成GB2312來解決中文亂碼,確實GB2312內碼的網頁可以正常顯示了,但這並非萬全之策。因為當你的網頁內碼不是GB2312,就算你在網頁用下面的meta指定了正確的語言,如ISO8859-1,也不會解碼為ISO8859-1,因為Apache已經先你一步將GB2312指定為網頁的語言了。
(2)養成良好的習慣,在每個網頁的<head>;</head>;的最前面加入這行:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">;
一般的中文版網頁編輯工具(例如FrontPage、Dreamweaver等)都會自動加上這行。
3、如何解決中文文件名無法訪問
在ie中選擇 工具 ->; internet選項 ->; 高級 ->; 取消“總是以UTF-8發送URL”。
UTF-8網頁空白,在網頁中加上metadata標識後,還需要手動調整編碼為 utf-8 才能正常顯示
如果使用的是Mozilla、Mozilla Firefox、Sarafi等其他目前流行的浏覽器,通常就不會有這樣的問題。
在網頁的meta中指定用UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />;
在<head>;</head>;之前,把"Content-Type"放在最前面,便可以解決這樣的問題了。
原因:
IE 解析網頁編碼時是 HTML 內的標識優先的,然後是 HTTP header ;而mozilla 系列的浏覽器剛剛好相反。
一般情況在,很多人是把<title>;</title>;排在最前面,並且在title中就出現了UTF-8中文,這樣,IE在解析時,就先遇到UTF-8,不往下解析了,因此必須把如果把meta放在UTF-8出現之前,這樣IE才能判斷這個網頁是以UTF-8編碼的。
總之:
無論是 PHP、JSP、ASP 或其他動態網頁的腳本語言,如果需要作編碼設定,最好放在最前面。
使用php,也可以定義php的默認語言.
php.ini中:
default_charset = "gb2312"
釋掉此行,做了以上修改,一樣是為了讓浏覽器根據網頁頭中的charset來自動選擇語言,這樣就可以在同台服務器上提供多種語言的網頁服務。
java中文亂碼的解決
轉
在基於JAVA的編程中,經常會碰到漢字的處裡及顯示的問題,比如一大堆亂碼或問號。
這是因為JAVA中默認的編碼方式是UNICODE,而中國人通常使用的文件和DB都是基於GB2312或者BIG5等編碼,故會出現此問題。
1、在網頁中輸出中文。
JAVA在網絡傳輸中使用的編碼是"ISO-8859-1",故在輸出時需要進行轉化,如:
String str="中文";
str=new String(str.getBytes("GB2312"),"8859_1");
但如果在編譯程序時,使用的編碼是“GB2312”,且在中文平台上運行此程序,不會出現此問題,一定要注意。
2、從參數中讀取中文
這正好與在網頁中輸出相反如:
str=new String(str.getBytes("8859_1"),"GB2312");
3、操作DB中的中文問題
一個較簡單的方法是:在“控制面扳”中,把“區域”設置為“英語(美國)”。如果還會出現亂碼,還可進行如下設置:
取中文時:str=new String(str.getBytes("GB2312"));
向DB中輸入中文:str=new String(str.getBytes("ISO-8859-1"));
4、在JSP中的中文解決:
在“控制面扳”中,把“區域”設置為“英語(美國)”.
在JSP頁面中加入:
如果還不行正常顯示,則還要進行下面的轉換:
如:name=new String(name.getBytes("ISO-8859-1"),"GBK");
就不會出現中文問題了。
CGI的?不知道對不?
找到CGI.pm,打開它,找到$self->;charset('ISO-8859-1');將它改為$self->;charset('GB2312');