欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中常見的中文亂碼總結

 更新時間:2022年06月02日 15:08:58   作者:氣死人  
本文主要介紹了java中常見的中文亂碼以及解決方法,主要包括字節(jié)碼文件讀取時出現(xiàn)的亂碼問題,本文通過實例代碼給大家介紹的非常詳細,具有很好的參考價值,感興趣的朋友跟隨小編一起看看吧

1.IO流中讀取文件時出現(xiàn)亂碼問題

1,先記錄從文件中(new File()的時候)讀取數(shù)據(jù)逐級包裝直至緩沖字節(jié)輸入流(new BufferReader())并設置編碼格式

//文件路徑
String path = "??????????????????";
//讀取文件
File file = new File(path);
//包裝成文件字節(jié)輸入流
FileInputStream fis = new FileInputStream(file);
//下邊這個流可以理解為從字節(jié)流邁向字符流的一個橋梁 
//并且InputStreamReader在創(chuàng)建對象的時候可以傳入想要的字符編碼的參
//數(shù)這里是“utf-8”
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
//再將InputStreamReader包裝進BufferReader中
BufferedReader br = new BufferedReader(isr);

2.字節(jié)碼文件讀取時出現(xiàn)的亂碼問題

遇到了一個在eclipse使用過程中發(fā)生的轉碼問題 ,安裝完eclipse后Project→Properties→Resource中寫著默認的編碼格式為GBK,我一直沒有改成UTF-8,在學習過程中因為一直統(tǒng)一使用GBK編碼 所以一直也沒有出現(xiàn)問題

在這里插入圖片描述

直到有一天我在湯姆貓上運行我學習Servlet中寫的代碼時發(fā)現(xiàn)一個有趣的現(xiàn)象
如果我使用response直接向服務器發(fā)送中文內容不會出現(xiàn)亂碼

`resp.getWriter().println("<h1>我喜歡吃</h1>");

但是在使用BufferReader的readline()方法讀取到中文內容時會出現(xiàn)亂碼情況,我試過無論我修改IO流中讀取字符的編碼格式 還是修改整個項目的編碼格式 都不能改變這個亂碼問題

BufferedReader br = new BufferedReader(fr);
br.readLine()//下圖中“tom!”的那一行

在這里插入圖片描述

請教了老師,得到了新的解決辦法
在本類中加入一行代碼,這句代碼的意思是查看VM啟動參數(shù),運行后在控制臺上就可以看到下圖中的信息(只截了部分片段)可以看到有一個屬性叫file.encoding它的值是GBK
意思我個人分析可能是我創(chuàng)建項目的時候使用的是GBK編碼 然后自己也運行過這個項目 .class的字節(jié)碼文件已經生成了 這時候如果只在項目右鍵Properties進去修改編碼格式為時已晚

//查看VM啟動參數(shù)
System.getProperties().list(System.out);

在這里插入圖片描述

老師給出了一個臨時解決辦法,在本類中將要出現(xiàn)亂碼的那一行之前加上一行

System.setProperty("file.encoding", "utf-8");

將上文中提到的VM參數(shù)中file.encoding的值現(xiàn)改成utf-8
其實最根本的解決辦法就是在項目創(chuàng)建之初就設定好編碼格式,如果出現(xiàn)像我這樣來不及的情況的話可以臨時使用這個方法

3.使用Servlet過濾器Filter統(tǒng)一設置整個Servlet項目中的各種編碼格式

Servlet提供了三大組件 servlet filer listener
在設置編碼格式時 我們就可以預先設定一個全局范圍內的過濾器,
創(chuàng)建Filter類 添加注解@WebFilter(eclipse在創(chuàng)建Filter類時會自動創(chuàng)建該注解) 注解的內容我這里直接寫了/* ,表示本項目中所有請求都必須先經過這個Filter過濾

@WebFilter("/*")
public class EncodingFilter implements Filter {
    
	public EncodingFilter() {
    
    }

	 @Override
	public void init(FilterConfig fConfig) throws ServletException {
		//當Filter被初始化的時候調用,打印輸出
		//Servlet默認是懶加載模式
		System.out.println("encodingfilter is initialized........");
	}
	 @Override
    public void destroy() {
    	//當filter被銷毀的時候調用,打印輸出
    	System.out.println("encodingfilter is destoryed.......");
    }
	
	//doFilter方法就相當于一個篩子 
	//一共四行代碼 分別是我們提出的三個要求,和一條放行代碼
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
	
		//設置解析報文的編碼格式
		request.setCharacterEncoding("utf-8");
		//設置返回響應使用的編碼格式
		response.setCharacterEncoding("utf-8");
		//告訴瀏覽器響應內容是text和html類型的文件 編碼格式是utf-8
		response.setContentType("text/html;charset=utf-8");
		
		//放行請求
		//其中包含了請求從哪里來  準備到哪里去的相關信息
		chain.doFilter(request, response);
	}
}

過濾器的功能除了簡介的注解形式之外,Servlet中還有一種基于web.xml文件的形式,打開web.xml文件,在根目錄下加入以下代碼

	<filter>
		<!-- 標簽的name -->
		<filter-name>encode</filter-name>
		<!-- 標簽的類的位置 -->
		<filter-class>com.zyj.day02.EncodingFilter</filter-class>
	</filter>

	<filter-mapping>
		<!-- 對應得標簽的name -->
		<filter-name>encode</filter-name>
		<!-- 聲明作用域的范圍 -->
		<url-pattern>/*</url-pattern>
	</filter-mapping>

雖然內容比較簡單 但寫起來也算是比較繁瑣 所以建議還是使用注解的形式來實現(xiàn)功能
值得一提的是
通過在filter類的init方法中添加了一句打印語句我們發(fā)現(xiàn),如果你既在類名上標明注解 又在web.xml文件中添加了配置,那么當有請求過來的時候,我們會在控制臺上發(fā)現(xiàn)init方法執(zhí)行了兩次,雖然目前看來沒有什么問題 但總的來說 二者有一個即可。

4,從阿里云服務器上的mysql數(shù)據(jù)庫中讀取數(shù)據(jù)產生的中文亂碼

問題描述:
當我在servlet中連接好數(shù)據(jù)庫 打算實現(xiàn)一個寫入的功能 一個讀取的功能
本來是可以通過sql語句順利的寫入中文,在數(shù)據(jù)庫中查詢到中文,還可以讀取數(shù)據(jù)打印在控制臺上 整個過程中都沒有出現(xiàn)亂碼問題 但當我想使用直接從數(shù)據(jù)庫中讀取中文 “小張” 作為我項目中登錄功能的賬號時 發(fā)現(xiàn)無法讀取到正確的數(shù)據(jù) 以至于判定我在賬號框輸入的“小張”不存在 正在初學階段 大體知道各個流程中的各個編碼環(huán)境 但還是沒有找到是哪個環(huán)節(jié)的編碼格式與眾不同

找到了一個解決辦法 :
在項目中druid-config.properties(阿里云德魯伊的配置文件)中的url屬性后拼接一個?characterEncoding=utf-8 設置讀取mysql數(shù)據(jù)庫中數(shù)據(jù)的時候的編碼格式

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://你的端口號:3306/estore?characterEncoding=utf-8
username=???mysql數(shù)據(jù)庫的賬號
password=???mysql數(shù)據(jù)庫的密碼
maxActive=30
maxWait=3000

下面在給大家補充介紹:java中常見的中文亂碼總結

亂碼現(xiàn)象產生的原因:由于編碼方式的不同,才會出現(xiàn)亂碼的情況。

哪里會產生亂碼:1.頁面  2.url地址  3.數(shù)據(jù)庫亂碼  4.數(shù)據(jù)提交(form,ajax)  5.開發(fā)工具

怎么解決:

1.統(tǒng)一開發(fā)工具的編碼設置

2.設置應用服務器的編碼方式,如:端口號,編碼方式

3.數(shù)據(jù)庫本身的編碼方式

4.強制設置request和response的數(shù)據(jù)編碼方式(同時也可以采用過濾器的方式攔截所有的編碼方式)

5.采用代碼方式強轉數(shù)據(jù)編碼方式(UrlEncode.encode("你好","utf-8"))

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關文章

  • 移動指定文件夾內的全部文件

    移動指定文件夾內的全部文件

    移動指定文件夾內的全部文件
    2009-01-01
  • java關鍵字final使用方法詳解

    java關鍵字final使用方法詳解

    在程序設計中,我們有時可能希望某些數(shù)據(jù)是不能夠改變的,這個時候final就有用武之地了。final是java的關鍵字,本文就詳細說明一下他的使用方法
    2013-11-11
  • Java的外部類為什么不能使用private和protected進行修飾的講解

    Java的外部類為什么不能使用private和protected進行修飾的講解

    今天小編就為大家分享一篇關于Java的外部類為什么不能使用private和protected進行修飾的講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • Java JVM編譯策略案例詳解

    Java JVM編譯策略案例詳解

    這篇文章主要介紹了Java JVM編譯策略案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • Java開發(fā)或調用WebService的幾種方式總結

    Java開發(fā)或調用WebService的幾種方式總結

    java開發(fā)過程中,很多地方都會遇到數(shù)據(jù)傳遞,遠程獲取數(shù)據(jù)問題,這篇文章主要介紹了Java開發(fā)或調用WebService的幾種方式的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • Spring Aware標記接口使用案例解析

    Spring Aware標記接口使用案例解析

    這篇文章主要介紹了Spring Aware標記接口使用案例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 教你Springboot如何實現(xiàn)圖片上傳

    教你Springboot如何實現(xiàn)圖片上傳

    這篇文章主要介紹了教你Springboot如何實現(xiàn)圖片上傳,首先大家明白圖片上傳,需要在數(shù)據(jù)庫定義一個varchar類型的img字段圖片字段,本文結合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • SpringMvc獲取頁面中的參數(shù)方法詳解

    SpringMvc獲取頁面中的參數(shù)方法詳解

    這篇文章主要介紹了SpringMvc獲取頁面中的參數(shù)方法詳解,獲取頁面的參數(shù)通常都是讓類實現(xiàn)設置HttpServletRequest request接口然后重寫接口中的方法的辦法來得到參數(shù),但是在Springmvc中有其他的獲取方法,需要的朋友可以參考下
    2023-10-10
  • java實現(xiàn)小i機器人api接口調用示例

    java實現(xiàn)小i機器人api接口調用示例

    這篇文章主要介紹了java實現(xiàn)小i機器人api接口調用示例,需要的朋友可以參考下
    2014-04-04
  • 簡單了解JavaBean作用及常用操作

    簡單了解JavaBean作用及常用操作

    這篇文章主要介紹了簡單了解JavaBean作用及常用操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05

最新評論