亂碼問題:
(1)服務器端:
修改httpd.conf (在Redhat中放置的位置為/etc/httpd/conf/)
查找:
AddDefaultCharset ISO-8859-1
改成:
#AddDefaultCharset ISO-8859-1
AddDefaultCharset off
]
這種方式關掉了服務器的默認語言的發(fā)送,這樣僅憑html文件頭中設置的語言來決定網頁語言。
很多文章都說通過修改為 AddDefaultCharset GB2312 把缺省語言改成GB2312來解決中文亂碼,確實GB2312內碼的網頁可以正常顯示了,但這并非萬全之策。因為當你的網頁內碼不是GB2312,就算你在網頁用下面的meta指定了正確的語言,如ISO8859-1,也不會解碼為ISO8859-1,因為Apache已經先你一步將GB2312指定為網頁的語言了,
(2)養(yǎng)成良好的習慣,在每個網頁的<head>;</head>;的最前面加入這行:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">;
一般的中文版網頁編輯工具(例如FrontPage、Dreamweaver等)都會自動加上這行。
3、如何解決中文文件名無法訪問
在ie中選擇 工具 ->; internet選項 ->; 高級 ->; 取消“總是以UTF-8發(fā)送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 內的標識優(yōu)先的,然后是 HTTP header ;而mozilla 系列的瀏覽器剛剛好相反。
一般情況在,很多人是把<title>;</title>;排在最前面,并且在title中就出現了UTF-8中文,這樣,IE在解析時,就先遇到UTF-8,不往下解析了,因此必須把如果把meta放在UTF-8出現之前,這樣IE才能判斷這個網頁是以UTF-8編碼的。
總之:
無論是 PHP、JSP、ASP 或其他動態(tài)網頁的腳本語言,如果需要作編碼設定,最好放在最前面。
使用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中的中文問題
一個較簡單的方法是:在“控制面扳”中,把“區(qū)域”設置為“英語(美國)”。如果還會出現亂碼,還可進行如下設置:
取中文時:str=new String(str.getBytes("GB2312"));
向DB中輸入中文:str=new String(str.getBytes("ISO-8859-1"));
4、在JSP中的中文解決:
在“控制面扳”中,把“區(qū)域”設置為“英語(美國)”.
在JSP頁面中加入:
如果還不行正常顯示,則還要進行下面的轉換:
如:name=new String(name.getBytes("ISO-8859-1"),"GBK");
就不會出現中文問題了。
CGI的?不知道對不?
找到CGI.pm,打開它,找到$self->;charset(‘ISO-8859-1‘);將它改為$self->;charset(‘GB2312‘);
補充:
如果使用php,也可以定義php的默認語言.
php.ini中:
;default_charset = "gb2312"
注意這里是注釋掉此行,做了以上修改,目的是為讓瀏覽器根據網頁頭中的charset來自動選擇語言,這樣就可以在同臺服務器上提供多種語言的網頁服務。
在基于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中的中文問題
一個較簡單的方法是:在“控制面扳”中,把“區(qū)域”設置為“英語(美國)”。如果還會出現亂碼,還可進行如下設置:
取中文時:str=new String(str.getBytes("GB2312"));
向DB中輸入中文:str=new String(str.getBytes("ISO-8859-1"));
4、在JSP中的中文解決:
在“控制面扳”中,把“區(qū)域”設置為“英語(美國)”.
在JSP頁面中加入:
如果還不行正常顯示,則還要進行下面的轉換:
如:name=new String(name.getBytes("ISO-8859-1"),"GBK");
就不會出現中文問題了。
解決web服務器各種應用的亂碼問題,歡迎補充和討論
--------------------------------------------------------------------------------
http://www.chinaunix.net 作者:wingger 發(fā)表于:2005-11-26 09:40:18
【發(fā)表評論】【查看原文】【Web服務器討論區(qū)】【關閉】
亂碼問題:
(1)服務器端:
修改httpd.conf (在Redhat中放置的位置為/etc/httpd/conf/)
查找:
AddDefaultCharset ISO-8859-1
改成:
#AddDefaultCharset ISO-8859-1
AddDefaultCharset off
]
這種方式關掉了服務器的默認語言的發(fā)送,這樣僅憑html文件頭中設置的語言來決定網頁語言。
很多文章都說通過修改為 AddDefaultCharset GB2312 把缺省語言改成GB2312來解決中文亂碼,確實GB2312內碼的網頁可以正常顯示了,但這并非萬全之策。因為當你的網頁內碼不是GB2312,就算你在網頁用下面的meta指定了正確的語言,如ISO8859-1,也不會解碼為ISO8859-1,因為Apache已經先你一步將GB2312指定為網頁的語言了,
(2)養(yǎng)成良好的習慣,在每個網頁的<head>;</head>;的最前面加入這行:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">;
一般的中文版網頁編輯工具(例如FrontPage、Dreamweaver等)都會自動加上這行。
3、如何解決中文文件名無法訪問
在ie中選擇 工具 ->; internet選項 ->; 高級 ->; 取消“總是以UTF-8發(fā)送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 內的標識優(yōu)先的,然后是 HTTP header ;而mozilla 系列的瀏覽器剛剛好相反。
一般情況在,很多人是把<title>;</title>;排在最前面,并且在title中就出現了UTF-8中文,這樣,IE在解析時,就先遇到UTF-8,不往下解析了,因此必須把如果把meta放在UTF-8出現之前,這樣IE才能判斷這個網頁是以UTF-8編碼的。
總之:
無論是 PHP、JSP、ASP 或其他動態(tài)網頁的腳本語言,如果需要作編碼設定,最好放在最前面。
使用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中的中文問題
一個較簡單的方法是:在“控制面扳”中,把“區(qū)域”設置為“英語(美國)”。如果還會出現亂碼,還可進行如下設置:
取中文時:str=new String(str.getBytes("GB2312"));
向DB中輸入中文:str=new String(str.getBytes("ISO-8859-1"));
4、在JSP中的中文解決:
在“控制面扳”中,把“區(qū)域”設置為“英語(美國)”.
在JSP頁面中加入:
如果還不行正常顯示,則還要進行下面的轉換:
如:name=new String(name.getBytes("ISO-8859-1"),"GBK");
就不會出現中文問題了。
CGI的?不知道對不?
找到CGI.pm,打開它,找到$self->;charset(‘ISO-8859-1‘);將它改為$self->;charset(‘GB2312‘);
--------------------------------------------------------------------------------
wingger 回復于:2004-10-10 11:03:56
UP
--------------------------------------------------------------------------------
haohaoo 回復于:2004-10-11 11:59:47
MM施主,俺崇拜你了
--------------------------------------------------------------------------------
wingger 回復于:2004-10-12 11:50:30
補充:
如果使用php,也可以定義php的默認語言.
php.ini中:
;default_charset = "gb2312"
注意這里是注釋掉此行,做了以上修改,目的是為讓瀏覽器根據網頁頭中的charset來自動選擇語言,這樣就可以在同臺服務器上提供多種語言的網頁服務。
--------------------------------------------------------------------------------
wingger 回復于:2004-10-12 12:31:33
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中的中文問題
一個較簡單的方法是:在“控制面扳”中,把“區(qū)域”設置為“英語(美國)”。如果還會出現亂碼,還可進行如下設置:
取中文時:str=new String(str.getBytes("GB2312"));
向DB中輸入中文:str=new String(str.getBytes("ISO-8859-1"));
4、在JSP中的中文解決:
在“控制面扳”中,把“區(qū)域”設置為“英語(美國)”.
在JSP頁面中加入:
如果還不行正常顯示,則還要進行下面的轉換:
如:name=new String(name.getBytes("ISO-8859-1"),"GBK");
就不會出現中文問題了。
--------------------------------------------------------------------------------
level 回復于:2004-10-12 12:39:34
:em02:
--------------------------------------------------------------------------------
wingger 回復于:2004-10-12 12:49:43
CGI的應該是這個:
找到CGI.pm,找到$self->;charset(‘ISO-8859-1‘);將它改為$self->;charset(‘GB2312‘);
或按以上同樣處理,應該可以
徹底解決Tomcat 5.0.19中文亂碼
一、Include的頁面亂碼
現象:include進來的頁面出現亂碼,其它頁面正常。
原因:Tomcat在缺省情況下使用ISO-8859-1編碼,但是在include時有時Tomcat不能正確根據外層.jsp文件的編碼解析include進來的文件,造成include進來的文件中的中文亂碼。
解決:這兒可以有很多解決辦法,但是對于我們的中文環(huán)境,從根本上的解決辦法是將Tomcat 5.0.19的核心缺省編碼從ISO-8859-1修改為GBK 。
二、提交的數據亂碼
現象:通過表單提交的數據出現亂碼。
原因:原因未明??赡苁荰omcat在接收到請求后,并沒有能夠根據request中的信息提前正確的編碼方式。
解決:可以添加一個設置字符集的Filter。
package filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
配置web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
?。糵ilter-class>filters.SetCharacterEncodingFilter</filter-class>
?。糹nit-param>
<param-name>encoding</param-name>
?。紁aram-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
?。糵ilter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
java Servlet 中文亂碼問題
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class GetFormData extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
String paramValues;
paramValues=request.getParameter("UserName";
response.setContentType("text/html;charset=gb2312";
PrintWriter out=response.getWriter();
out.println("<html>;<title>;test</title>;<body>;";
out.println("以下是收到的數據<br>;";
out.println("UserName="+paramValues);
out.println("<br>;接收結束";
out.println("</body>;";
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
doGet(request,response);
}
}
只需要把
paramValues=request.getParameterValues("UserName"改成下面的就可以了
paramValues=request.getParameter("UserName";
當然這句是必須的 response.setContentType("text/html;charset=gb2312"
在jsdk2.1 tomcat及Domino5.8上的Servlet引擎運行通過了
由于操作系統(tǒng)、瀏覽器、數據庫、JVM采用的字符集都不一樣,基于Weblogic Server開發(fā)的應用經常出現中文顯示亂碼問題,其實在Weblogic Server上運行的WEB應用有很多與字符集有關的設置,下面做一個總結,為了正確處理中文,最好把這些設置都設上。
1. 在JSP文件頭加入
<%@ page contentType=text/html; charset=GBK %>;
指定該JSP采用的字符集。
2.在Weblogic.xml文件的中加入:
引用:encoding
GBK
指定JSP文件中采用的字符集,在JSP文件中的<%@ page contentType=text/html; charset=GBK %>;會覆蓋該設置
3.在Weblogic.xml文件的中加入
compilerSupportsEncoding
true
如果為TRUE,指定在編譯JSP文件時,采用在JSP文件中定義的
<%@ page contentType=text/html; charset=GBK %>;或中定義的encoding參數中定義的字符集進行編碼,如果為FALSE,則采用JVM中默認指定的字符集進行編碼。
4. Weblogic Server需要把HTTP request(GET 和POST)中的數據從它的原始編碼轉化為Unicode,以便Java servlet API進行處理,為了做這種轉換,Weblogic Server需要知道HPPT request中的數據的編碼方式。這可以通過在Weblogic.xml的中設置.
〈INPUT-charset>;
/
GBK
5.從ORACLE數據庫中檢索出來的中文顯示不正確時,在這種情況下,如果數據庫使用的是中文字符集,并使用的是Type 2 JDBC Driver時,可加入Weblogic.codeset=GBK的屬性來解決這個問題。代碼如下:
java.util.Properties props = new java.util.Properties();
props.put(Weblogic.codeset, GBK);
props.put(user, scott);
props.put(password, tiger);
String connectUrl = jdbc:Weblogic:oracle;
Driver myDriver = (Driver)
Class.forName(Weblogic.jdbc.oci.Driver).newInstance();
Connection conn =
myDriver.connect(connectUrl, props);
6. 如果是采用WTC調用Tuxedo中的服務,在JSP頁面中無法正確顯示中文,必須使安裝Tuxedo的服務器上的NLS_LANG環(huán)境變量與數據庫中的字符集的設置一樣。如后臺Oracle數據庫中的字符集設置為SIMPLIFIED CHINESE_CHINA.ZHS16GBK,那么Tuxedo應用服務器上的NLS_LANG環(huán)境變量應設置為:
export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK