Java 的亂碼解決方法 統一編碼 這裡使用UTF-8編碼
一、介紹兩個類
URLEncoder//編碼
URLDecoder//解碼
看看下面的測試輸出,你就明白是做什麼的了
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
public class main {
public static void main(String[] args) throws UnsupportedEncodingException{
System.out.println("UTF-8");
String a = URLEncoder.encode("中文測試", "UTF-8");//編碼
System.out.println(a);
System.out.println(URLDecoder.decode(a,"UTF-8"));//還原
//下面同理
System.out.println("\nGBK(百度就是用這種)");
a = URLEncoder.encode("中文測試", "GBK");
System.out.println(a);
System.out.println(URLDecoder.decode(a,"GBK"));
}
}
[輸出]
UTF-8
%E4%B8%AD%E6%96%87%E6%B5%8B%E8%AF%95
中文測試
GBK(百度就是用這種)
%D6%D0%CE%C4%B2%E2%CA%D4
中文測試
看了上面的輸出就明白百度位址列那一串是什麼了。假如你做了下面一系列設定,那麼在伺服器端你接收到Get方法的中文引數將被轉換成型別%D6%D0%CE%C4%B2%E2%CA%D4 你就需要用到上面的兩個工具類, 如果你像我在下面設定,你在上面的呼叫的第二個引數也得是UTF-8; 使用post就不需要解碼,直接讀取就行了。
二、配置tomcat (這一步我沒有做,但沒發現問題,我用的是Tomcat 5.08經典版本)
開啟tomcat的server.xml檔案,找到區塊,加入如下一行:
URIEncoding="UTF-8"
完整的應如下:
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
三、增加連線資料庫的引數
mysql 資料庫建表時設定編碼為utf8(寫法不同不是UTF-8),
連線資料庫:
// 連線引數,這裡設定連線使用的編碼
public static final String DB_URL = "jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=utf8";
四、使用過濾器設定編碼
1、
// 簡單的就用下面這個,這裡使用的是硬編碼也就是在程式碼中寫死了用那種編碼我這裡用utf-8,也可以把編碼設定用寫到web.xml中的Filter設定中
package com.max;
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;
/**
* Example filter that sets the character encoding to be used in parsing the
* incoming request
*/
public class SetCharacterEncodingFilter implements Filter {
/**
* Take this filter out of service.
*/
public void destroy() {
}
/**
* Select and set (if specified) the character encoding to be used to
* interpret request parameters for this request.
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
// 傳遞控制到下一個過濾器
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
web.xml配置檔案中增加
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.max.SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、
//下面這個是將編碼設定放到web.xml中的
filter類的內容:
/*
* ====================================================================
*
* JavaWebStudio 開源專案
*
* Struts_db v0.1
*
* ====================================================================
*/
package com.strutsLogin.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 SetCharacterEncodingFilter implements Filter {
// ----------------------------------------------------- Instance Variables
/**
* The default character encoding to set for requests that pass through this
* filter.
*/
protected String encoding = null;
/**
* The filter configuration object we are associated with. If this value is
* null, this filter instance is not currently configured.
*/
protected FilterConfig filterConfig = null;
/**
* Should a character encoding specified by the client be ignored?
*/
protected boolean ignore = true;
// --------------------------------------------------------- Public Methods
/**
* Take this filter out of service.
*/
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
/**
* Select and set (if specified) the character encoding to be used to
* interpret request parameters for this request.
*
* @param request
* The servlet request we are processing
* @param result
* The servlet response we are creating
* @param chain
* The filter chain we are processing
*
* @exception IOException
* if an input/output error occurs
* @exception ServletException
* if a servlet error occurs
*/
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);
}
/**
* Place this filter into service.
*
* @param filterConfig
* The filter configuration object
*/
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 Methods
/**
* Select an appropriate character encoding to be used, based on the
* characteristics of the current request and/or filter initialization
* parameters. If no character encoding should be set, return
* <code>null</code>.
* <p>
* The default implementation unconditionally returns the value configured
* by the <strong>encoding</strong> initialization parameter for this
* filter.
*
* @param request
* The servlet request we are processing
*/
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}// EOC
然後我們在web.xml中加一些配置,就可以了,配置如下:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>javawebstudio.struts_db.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
放在web.xml的合適位置。一般在最後,<jsp-config>標籤之前(如果有的話)
五、在JSP頁面中設定編碼
<%@ page language="java" pageEncoding="UTF-8"%>
六、使用i18n
使ApplicationResources.properties支援中文
建立一個ApplicationResources_ISO.properties檔案,把應用程式用的message都寫進去,然後在dos下執行這個命令,
native2ascii -encoding gb2312 ApplicationResources_ISO.properties ApplicationResources.properties
native2ascii [引數] [輸入檔案] [輸出檔案]
native2ascii這個工具是jdk自帶的一個東東,所以如果path都設定正確就可以直接運行了,你可以在$java_home$/bin下找到他。
轉換後的中文類似於這個樣子
中文格式下 :user_name_label=使用者名稱:
ascii格式下 :user_name_label=\用\戶\名\:
Netbean 有個方便的編輯多國語言的工具,但不是直接寫,而是在彈出視窗中編輯,確定插入後自動轉換成ascii如上面那種.
Eclipse 有個一樣功能的外掛jinto在下面的地址中下載
在Jsp頁面使用 "user_name_label" 來引用 "使用者名稱:",而且能夠簡單方便實現多語言支援。
通常將編碼同一成UTF-8是很有好處的,如果想使用其他編碼如GBK,這上面用到UTF-8全改為GBK
有些東西接觸多了就瞭解,做的多了就熟悉。
宣告:這篇只是我自己的總結和備忘錄,希望對你有用,上面引用的程式碼和例子主要來源於網上。
相關推薦
php 多語言(UTF-8編碼)導出Excel、CSV亂碼解決辦法之導出UTF-8編碼的Excel、CSV
csv tex 完整 多語 繁體 HP 項目 .html agen 轉自: https://www.cnblogs.com/kclteam/p/5278926.html 新項目,大概情況是這樣的:可能存在多國、不同語種使用者,比喻有中文、繁體中文,韓文、日本等等,開發
Java 的亂碼解決方法 統一編碼 這裡使用UTF-8編碼
一、介紹兩個類 URLEncoder//編碼 URLDecoder//解碼 看看下面的測試輸出,你就明白是做什麼的了 import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.U
Java 的亂碼解決方法 統一編碼UTF-8
一、介紹兩個類URLEncoder//編碼URLDecoder//解碼 看看下面的測試輸出,你就明白是做什麼的了 import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import jav
Java 的亂碼解決方法 統一編碼UTF-8 (轉)
一、介紹兩個類URLEncoder//編碼URLDecoder//解碼看看下面的測試輸出,你就明白是做什麼的了import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.
Html表單提交到Servlet輸出到頁面亂碼 Html使用的編碼是UTF-8編碼顯示頁面,之後使用form表單提交欄位到Servlet中,Servlet將利用getParamer方法獲得fo
Html使用的編碼是UTF-8編碼顯示頁面,之後使用form表單提交欄位到Servlet中,Servlet將利用getParamer方法獲得form提交的欄位,之後通過Respone中的writer將獲取到的前臺欄位反饋到前臺中去,出現中午亂碼錯誤,這是因為添加了這個欄位。 response.setCon
《Java》Java“字串操作”實際應用——形成GBK編碼和UTF-8編碼的文字檔案,通過其二進位制資料觀察兩種編碼的不同
一、任務目標 完成一個java application應用程式,可以把GBK編碼的漢字字串與UTF-8編碼的漢字字串相互轉換。並配合寫檔案操作形成不同編碼格式的文字檔案,可以通過其二進位制資料觀察兩種編碼的不同。 二、程式設計思路 博主將“程式設計思路”以流程
QT5 中文顯示亂碼,編碼用utf-8編碼
QT5 專案中,中文錯誤有兩種方法,分享如下: 1. 就是用utf-8編碼 在 .cpp 中 最上端新增以上程式碼 #pragma execution_character_set("utf-8") 2.使用巨集 QString str = QStringLit
java中如何從字串中刪選中文字元(GBK編碼和UTF-8編碼)
1.GBK編碼中文佔兩個位元組,英文佔一個位元組。下面進行一個小的程式的測試: <span style="font-size:24px;">import java.io.Unsupport
Python中的Unicode編碼和UTF-8編碼
2個 傳輸 硬盤 中文字符 結合 2.7 客戶端 有一點 來看 下午看廖雪峰的Python2.7教程,看到 字符串和編碼 一節,有一點感受,結合 崔慶才的Python博客 ,把這種感受記錄下來: ASCII碼:是用一個字節(8bit, 0-255)中的127個字母表示大
python中的字符串編碼問題——2.理解ASCII碼、ANSI碼、Unicode編碼、UTF-8編碼
unicode編碼 統一 col 簡單 utf 文字 stand 二進制 pan ASCII碼:全名是American Standard Code for Information Interchange,ASCII碼中,一個英文字母(不分大小寫)占一個字節的空間,範圍0x0
淺談unicode編碼和utf-8編碼的關係
字串編碼在Python裡邊是經常會遇到的問題,特別是寫檔案以及網路傳輸的過程中,當呼叫某些函式的時候經常會遇到一些字串編碼提示錯誤,所以有必要弄清楚這些編碼到底在搞什麼鬼。 我們都知道計算機只能處理數字,文字轉換為數字才能處理。計算機中8個bit作為一個位元組,所以一個位元組能表示最大的數字
關於Unicode編碼和UTF-8編碼
說到編碼,得先從ASCII編碼講起。ASCII編碼是由美國人發明,美國的字元不超過255個,所以ASCII編碼使用了8bit 即一個位元組來儲存字元。由於漢字的數量遠超255個,所以中國自己發明了一個GB2312編碼來表示漢字,一般的漢字使用2個
字元編碼之Ascll編碼,ANSI編碼,Unicode編碼,UTF-8編碼 ,BOM
從大一上C語言就開始認識了Ascll編碼,ascll碼也算是我們最早所接觸的編碼 【1】Ascll碼 Ascll碼由三部分組成: 第一部分從00H到1FH共32個,一般用來通訊或作為開工至之用,有的可以顯示在螢幕上,有的則無法再螢幕上顯示。
C語言實現windows1251編碼轉utf-8編碼
windows1251是俄羅斯本地的一種編碼,不通用。mini xml好像無法解析,但客戶就是提供一個這種編碼檔案的url,讓你解析裡面的資料。 開源的編碼轉換庫又太大,只好用C語言寫一個。有些字元轉換沒什麼規律,只能一一對應,很耿直的轉換方式,哈哈~~,不過以後如果遇到相
Ansi編碼和UTF-8編碼
ANSI指American National Standards Institute(美國國家標準學會)。 ANSI編碼不是一種具體的編碼方式,而是一種指定在某些環境下使用某些編碼方式的標準。比如,在中文環境中ANSI的編碼標準為GBK,在日語環境中ANSI的編
JAVA以UTF-8編碼格式匯出CSV檔案,用office開啟產生亂碼的解決方法
一般java匯出為csv檔案程式碼如下 OutputStreamWriter osw = new OutputStreamWriter(resp.getOutputStream
idea軟體編碼已經設定好了為utf-8,但是svn中down下來的檔案格式本身不是utf-8的,此時開啟後會出現中文亂碼解決方法
我是個idea的忠實使用者,新公司的專案都是用eclipse做的,通過svn拉下程式碼後發現,註釋的內容裡,中文內容都是亂碼。問過專案負責人,說可能是GBK編碼。 但是,我通過idea的setting設定了編碼,試了5種編碼都沒用,中文內容還是亂碼。最後還是自己試出來解決方案。 詳細的原因請參考
解決excel打開utf-8編碼csv文件亂碼的bug
導入 對話框 原因 識別 直接 格式 excel exce 編碼 直接用 excel 打開 utf-8 編碼的 csv 文件會導致漢字部分出現亂碼。原因是 excel 以 ansi 格式打開,不會做編碼識別。 打開 utf-8 編碼的 csv 文件的方法: 1) 打開
request.getParameter(“引數名”) 中文亂碼解決方法【新手設定問題】【JSP】-表單傳值問題:為什麼設定UTF-8之後還是亂碼?
request.getParameter(“引數名”) 中文亂碼解決方法【新手設定問題】【JSP】-表單傳值問題:為什麼設定UTF-8之後還是亂碼? 問題:jsp讀取的value值亂碼;設定UTF-8之後還是亂碼…… 備註:本文是轉載的,題目上增加關鍵詞方便查詢
emWin - 俄語UTF-8編碼亂碼問題(已解決)
原文連結:emWin - 俄語UTF-8編碼亂碼問題(已解決) 目錄 第一步: 第二步: 後續故事: 使用的是STM32微控制器,用的是emWin的庫,編碼工具是U2C(UTF-8 To C檔案)。 最近在搞一個專案,液晶屏要顯示九種語言、種語言、語言、言言言!