這兩天,終於開始了我入軟體開發的第一個網站。。。總體來說,還算是比較順利的,呵呵,不過最後還是出現了一點小插曲,終於遇見了我最“期待”的亂碼問題,亂碼啊,亂碼啊,你真是我這樣小菜鳥級地上帝啊。。。
現在開始說說我遇見的亂碼情況,我的總體架構是前台介面一個表單,然後提交資訊到背景action裡面,然後用在調用方法把資料提交到資料庫裡面。。。可惜一切都不像我想的那麼完美,最後在表單提交到action裡面的時候還是出現了亂碼。。。愁啊。。。但是由於解決了一個暑假的亂碼經驗,也沒以前那麼感覺恐懼了。。。想著利用以前的方法一定可以解決,可是最後解決了一整天的時間,以前的方法幾乎都用過了。。最後還是沒有解決。。。
我以前的自認為是殺手鐧的方法:1.在表單頁面頭部設定字元編碼為utf-8
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
然後在設定頁面請求和回應的編碼:
<%request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); %>
最後再再action裡面寫上:
ServletActionContext.getRequest().setCharacterEncoding("utf-8");
ServletActionContext.getResponse().setCharacterEncoding("utf-8");
設定完這些以為完事大吉了。。。可是最後提交還是亂碼,亂碼啊。。亂碼。。沒辦法,繼續想辦法。。最後想起來了以前曾經用過的傳說中的什麼struts2國際化問題,在struts.xml前面加上這麼一句:
<constant name="struts.i18n.encoding" value="utf-8" />
哎,咱也不管這是什麼多大的國際化。。。心想著只要能解決咱的問題就OK了。。。。課時大失所望啊。。還國際化,真沒見其什麼效果。。。
亂碼啊,,亂碼,你把我搞得頭都大了。。。沒辦法,繼續解決。。去網上查查吧。。。最後實在沒辦法了,還是用一下我最討厭的過濾器試試吧。。
具體過程:
1.編寫過濾器類:
package org.RN.util;
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;
public class Encoding implements Filter {
@SuppressWarnings("unused")
private FilterConfig config=null;
String encoding=null;
public void destroy() {
this.encoding=null;
this.config=null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(encoding!=null)
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
this.config=arg0;
this.encoding=arg0.getInitParameter("encoding");
}
}
2.在web.xml配置
<filter>
<description>緩衝過濾</description>
<filter-name>Encoding </filter-name>
<filter-class>
filter.Encoding
</filter-class>
</filter>
<filter-mapping>
<filter-name>Encoding </filter-name>
<url-pattern>*</url-pattern>
</filter-mapping></filter>
寫完這些,驕傲的以為終於萬事大吉了,可是可是可是他竟然還是亂碼,我沒辦法了,我以前的那點解決亂碼的老店都拿出來了,沒辦法了,心想著這回死定了,這個時候多虧了好兄弟兼職團隊夥伴小金金的鼓勵啊。。就需網上淘金,查啊查,論壇發帖啊:
以下是我發帖及回帖的一些情況
1樓:我寫了一個表單。。表單的資料提交到struts2的action裡面。。。然後由action提交到資料庫。。可是資料到了資料庫就是亂碼了。。。。我用的資料庫是sqlserver。。。高手指點啊。。。。盡量相信點。。。。。表單介面也設定了:<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>和<%request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); %>
action 裡面也設定了 ServletActionContext.getRequest().setCharacterEncoding("utf-8");
ServletActionContext.getResponse().setCharacterEncoding("utf-8");
2樓:資料庫編碼 看看吧
3樓:說詳細點。。。怎麼設定sqlserver的字元編碼啊、、、我不會。。。沒百度出來、、、
4樓:jdbc:mysql://localhost:3306/android_stat?useUnicode=true&characterEncoding=utf-8
在串連資料庫的時候加上 ?useUnicode=true&characterEncoding=utf-8
5樓:加上那個。。。"jdbc:sqlserver://localhost:1433; DatabaseName=RuiNiInfoDb?useUnicode=true&characterEncoding=utf-8";
資料庫就連不上了。。。
無法開啟登入所請求的資料庫 "RuiNiInfoDb?useUnicode=true&characterEncoding=utf-8"。登入失敗。
6樓:怎麼可能呢,實在不行寫一個過濾器,應該能搞定的。
7樓:滿足以下兩點,不會有亂碼的存在的。
1,程式檔案,jsp檔案是utf-8編碼的,jsp檔案的頭搖設定utf-8編碼類別型
2,資料庫設定成utf-8
你看下你的資料庫編碼設定的是什麼。如果網頁是utf-8 資料庫是gb2312 也有可能會亂碼、在資料庫上右鍵屬性查看。
8樓;sqlserver設定資料庫編碼
9樓:一般ssh整合的時候都會在web.xml裡面配置一個字元過濾的。
<!-- 轉譯字元編碼 -->
Java code <filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
10樓:恩樓上說的很對,就是資料庫的問題,解答如下:第一種辦法:先選中出錯的資料庫→選中以後右鍵點擊屬性會彈出資料庫屬性 對話方塊→選中資料庫屬性對話方塊中的選項→把選項中的定序設定成:Chinese_PRC_90_CI_AS→最後點擊確定即可。(注意:在選擇資料庫屬性的時候必須確保你所修改的資料庫未被使用才可以修改否則會失敗的)第二種辦法:首先開啟你的sql查詢分析器(建立查詢),然後輸入以下代碼執行即 可:ALTER DATABASE 資料庫名 COLLATE Chinese_PRC_90_CI_AS例如:
ALTER DATABASE 9NPC COLLATE Chinese_PRC_CI_AIALTER DATABASE AutoUpgrade COLLATE Chinese_PRC_CI_AI解析原因:出現以上情況主要是因為資料庫屬性的定序設定不正確,在Microsoft SQL Server 2005 中,字串的實體儲存體由定序控制。定序指定表示每個字元的位元模式以及儲存和比較字元所使用的規則。定序名稱由兩部份構成,前半部份是指本定序所支援的字元集。如: Chinese_PRC_90_CI_AS前半部份:指UNICODE字元集,Chinese_PRC_指標對大陸簡體字UNICODE的定序。定序的後半部份即尾碼
含義: _BIN 二進位排序 _CI(CS) 是否區分大小寫,CI不區分,CS區分 _AI(AS) 是否區分重音,AI不區分,AS區分 _KI(KS) 是否區分假名類型&defKI不區分,KS區分 _WI(WS) 是否區分寬度 WI不區分,WS區分 區分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請選擇該選項。區分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,比較還將重音不同的字母視為不等。區分假名:如果想讓比較將片假名和平假名日語音節視為不等,請選擇該選項。區分寬度:如果想讓比較將半形字元和全形字元視為不等,請選擇該選項。這個是百度找的,sqlserver2005的解決辦法,怎麼會找不到呢。。。
11樓:sqlserver 資料庫的編碼問題。
哎,可能是我說錯了。。。可惜,回答的都是關於資料庫的問題。。。並且很多人都是一些廢話。。。哎,沒辦法。。繼續想辦法發。。。
哈哈,運氣不錯,遇到一個女程式員:教給我一種新的解決亂碼的方法:
author=new String(author.getBytes("iso8859-1"),"utf-8");
content=new String(content.getBytes("iso8859-1"),"utf-8");
安說這也不是什麼新方法。。。可是他慣用啊、、、、呵呵。。。還真把亂碼給解決了、、、、
按著這個方法。。。成功解決了兩個類似的亂碼問題,課時當解決第三個類似的亂碼問題時,這種方法就失效了。。。。
仔細分析了一下,很可能這個表單裡麵包括檔案上傳的問題:
<form action="NewAddAction"method="post" name="form"
enctype="multipart/form-data">
恩,就是這裡的問題。。反覆實驗了一下,去掉以上所有解決亂碼的方法就可以成功解決這裡的亂碼問題。。。哎,誰叫咱是菜鳥來著。。。只能反覆的實驗。。。這裡面為什麼這樣用,我還真不知道這裡面的原理。。。哎,菜鳥的悲哀啊
好了。。。亂碼解決了,這篇文章頁應該包括了大部分的解決亂碼的方法把。。。
歡迎大家參考,拍磚,轉載請註明出處