經過一個星期的艱苦奮斗終于解決了這個問題,特將經驗摘錄下來備忘。本文將解決以下的幾種亂碼問題。
中文存入 mysql 數據表出現的亂碼,從 JSP 頁面讀取 mysql 中文數據出現亂碼,以及在 sell 環境下查看數據庫表中文數據出現亂碼。
linux平臺:ubuntu6.10
mysql版本:5.0
瀏覽器:firefox2.0
為了解決中文亂碼的問題首先就是要同一字符集,我采用utf-8。
第一步:安裝mysql后,修改配置文件/etc/mysql/my.cnf 找到相應項并添加如下字段,如下所示:(注意是添加,配置文件中其他不相關的內容下面并沒有列出來)
[client]
default-character-set=utf8
[mysqld_safe]
default-character-set=utf8
[mysqld]
default-character-set=utf8
[mysql]
default-character-set=utf8
重新啟動mysql服務,進入sell終端,進入mysql的命令提示符下輸入如下指令:
mysql>show variables like '%char%';
如果出現的列表各項內容和以下相同表明配置成功了,
+----------------------+---------------------
| Variable_name | Value
+-----------------------+---------------------
| character_set_client | utf8
| character_set_connection | utf8
| character_set_database | utf8
| character_set_filesystem | binary
| character_set_results | utf8
| character_set_server | utf8
| character_set_system | utf8
| character_sets_dir | /usr/share/mysql/charsets/
+---------------------+----------------------
第二步:在要發送中文或者要讀取中文的JSP頁面(最好所有頁面)都添加如下聲明:
<%@page pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
<% request.setCharacterEncoding("utf-8"); %>
在<head>標簽對中添加如下:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
注意在servlet中對請求進行響應的方法中同樣要有:
response.setContentType("text/html;charset=utf-8");
第三步:(由于不明原因firefox發送的請求仍然是latin1的時候執行這一步)
在將請求的參數插入數據庫之前還要再執行一次轉碼(將latin1編碼轉換為utf-8),例如:
String utf8_str = new String( latin_str .getBytes("latin1"),"utf-8");
這一步可以寫在一個過濾器中,不怕麻煩也可以在每一次在將請求數據插入之前都進行一次轉碼。
另外:在連接數據庫的時候可以不用加上字符集參數了,直接用用戶名和密碼連接就可以了,如連接:
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/數據庫名","用戶名","密碼");
?????? 嵌入 *.js 文件 <script? language=”javScript” src=”url ”></script>
1.? 定義結構:
a)???????? 變量定義: var xx = “xx” 無須匹配類型;
b)??????? 函數定義: function method(x , y){…} 參數同樣不用匹配類型;
可以通過 arguments.length 屬性來確定參數個數來創建不確定參數的函數如:
??? function noArguments(){
????????????? var len = arguments.length;
????????????? for(var i=0;i<len;i++){
????????????? ????????????? var fristArgument = noArguments.arguments[i];
??????????????????????????? ………// 通過 ? noArguments.arguments[i] 獲得參數;
}
}
c)??????? 對象定義:
定義方式一 ? function obj(x,y){
?????? this.x=x;
?????? this.y=y;
?????? this.m1=method1;
?????? this.m2=method2;
?????? function method1(){…..}
function method2(){…..}
}
定義方式二 ? function obj(x,y){
?????? this.x=x;
?????? this.y=y;
?????? this.m1=function method1(){……}
?????? this.m2=function method2(){……}
}
d)??????? 使用對象:
var obj1 = new obj();
var new_x = obj.x; // 是用屬性的方式 1
var new_y = obj[‘y’]; // 是用屬性的方式 2
二 內置對象:
?????? a) 數組對象( Array ):
???????????????????? var newArry =new Arry(n);
???????????????????? var newArry =new Arry(“one”,”two”,”there”,”four”);
?????? 注:屬性和方法不再列出。
??????
b) 字符串對象( String ):
???????????????????? var newStr =”xxx”;
???????????????????? var newStr=new String(“xxx”);
?????? 對字符串的比較直接使用 ”= =”
??????
?????? c) 數學對象( Math )
????????????? 注意:使用數學對象時不需要創建該對象,直接使用即可;
????????????? 例如: Math.PI; // 屬性的使用
Math.abs(x);// 方法的使用;
d) 日期對象( Date )
??????? var date1 =new Date();
????????????? var date2 =new Date(“ 日期子串 ”);
????????????? var date3 =new Date( 年,月,日, [ 時,分,秒,毫秒 ]);
????????????? var date4 =new Date( 毫秒 );
?
<%@ page
???
language="java"
???
extends="指定父類"
???
import="導入JAVA類" ??
???
session="false||true是否使用session對象"
???
buffer="定義緩沖區大小默認8kb"
???
autoFlush="false||true自動清除緩沖區"
???
isThreadSafe="false||true是否處理多請求"
???
info="定義相關信息.txt"
???
errorPage="url指定錯誤頁"
???
contentType="編碼方式"
???
isErroPage="false||true是否為處理異常頁"
%>?
<%@ include
file
="URL指定要包含的另外一個JSP文件,*.jspf,*.htmlf"%>
<%@ taglib
uri
="" prefix=""%>
常用的JSP動作元素
1
???
<jsp:useBean
???????
id="指定該bean對象名"
???????
scope="page||request||session||application bean的作用域"
???????
class="bean的class文件名,注意不能與beanName屬性一起使用"
???????
beanName="*.class或*.ser或bean包的名字,緊當bean不存在于指定???????????? 的作用域時才使用 "
???????
type="與class或beanName一起使用,指定要實例化的bean的類或接口"
???
>
???
<jsp:setProperty name="" property="" value="">實例話bean的初始特性值。
???
</jsp:/useBean>
2??
???
<jsp:setProperty
???????
name="對應<jsp:useBean>中的id"
???????
property="*||bean屬性名 通過request參數設定bean屬性值"
???????
value="為bean屬性值指定值,需要指定bean屬性名"
???
/>
3??
???
<jsp:getProperty
???????
name="對應<jsp:useBean>中的id"
???????
property="對應想要獲得的屬性值名"
???
/>
4
???
<jsp:include>
???????
page="要包含文件的相對地址"
???????
flush="true||false 是否清空緩沖區"
???????
<jsp:param name="" value="" 可以傳遞一個參數/>
???
</jsp:include>
5
???
<jsp:forward page="URL或者一個表達式,用于將請求的頁面轉向其他頁面">
???????
<jsp:param name="" value="">可以傳遞參數;
???
</jsp:forward>
6??
???
<jsp:param
name="" value="">
<%! %>
變量和方法聲明塊,要使用“;”結尾
<%? %>
腳本塊 可以聲明局部變量 但是不能定義方法!
<%= %>
表達式 注意內部不能使用“;”
軟件準備: ( 我使用的是 WINDOWSXP — SP2)
?????? //------JDK5.0------
?????? jdk-1_5_0-windows-i586.exe
?????? //------JSP 容器 ----
?????? apache-tomcat-5.5.16.zip
tomcatPluginV31.zip
//------j2ee 插件 -----
?????? lomboz-eclipse-emf-gef-jem-3.1RC1.zip
?????? //-----------IDE-----------
eclipse-platform-3.2-win32.zip
//-----------JAVA 開發插件
eclipse-JDT-3.1zip
//----------- 語言漢化包 ------
NLpack1-eclipse-JDT-3.1.zipNLpack1-eclipse-platform-3.1-win32.zip
這些插件和軟件都是在官方網站上下載的,不知道地址的同學可以搜索一下就可以了。我就不浪費口水了。在進行以下安裝之前要先安裝 JDK ,一路下一步即可。完成后設置三個環境變量(如果原來系統有就不要添加了) JAVA_HOME(jdk 安裝目錄 )PATH(jdk 安裝目錄下的 BIN 目錄 )CLASSPATH( 類文件目錄,記到前面加個 .; ?)
?????? 第一步:安裝 eclipse3.1
直接解壓 eclipse-platform-3.2-win32.zip 到一個目錄下,建議目錄名路徑名之間不要有空格和漢字(原因我也不太說的清楚),好了之后再解壓 eclipse-JDT-3.1zip 到同一目錄中,注意要直接覆蓋而不要將解壓后的內容放在 eclipse 目錄下,完成之后用同樣的方法解壓后面兩個漢化包覆蓋 eclipse 目錄。
?????? 第二步:安裝 tomcat
將 apache-tomcat-5.5.16.zip 直接解壓到一個目錄即可,完成之后建立一個系統環境變量叫 TOMCAT_HOME 并把值設置為剛才 tomcat 的安裝目錄 ;
第三步:安裝 tomcatPluginV31.zip
????????????? 將它解壓后的文件夾拷貝到 X:\....\eclipse\plugins 文件夾下面即可;
?????? 第四步:安裝 lomboz
????????????? 安裝漢化包插件一樣,直接解壓覆蓋原來的 eclipse 目錄即可;
?????? 好了,安裝完成了!現在開始配置了:
??????
需要配置的地方用圖片表示:大家照這改就可以了!(注意安裝目錄要使用你實際安裝的目錄不要照到抄哈!)
???圖片在http://corsair.java.photo.163.com 的work目錄下。
?