最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中常見的中文亂碼總結(jié)

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

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

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

//文件路徑
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包裝進(jìn)BufferReader中
BufferedReader br = new BufferedReader(isr);

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

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

在這里插入圖片描述

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

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

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

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

在這里插入圖片描述

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

//查看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)建之初就設(shè)定好編碼格式,如果出現(xiàn)像我這樣來不及的情況的話可以臨時使用這個方法

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

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

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

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

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

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

	<filter-mapping>
		<!-- 對應(yīng)得標(biāo)簽的name -->
		<filter-name>encode</filter-name>
		<!-- 聲明作用域的范圍 -->
		<url-pattern>/*</url-pattern>
	</filter-mapping>

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

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

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

找到了一個解決辦法 :
在項目中druid-config.properties(阿里云德魯伊的配置文件)中的url屬性后拼接一個?characterEncoding=utf-8 設(shè)置讀取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中常見的中文亂碼總結(jié)

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

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

怎么解決:

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

2.設(shè)置應(yīng)用服務(wù)器的編碼方式,如:端口號,編碼方式

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

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

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

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

相關(guān)文章

  • JAVA幫助文檔全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版整理

    JAVA幫助文檔全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版整理

    JDK(Java Development Kit,Java開發(fā)包,Java開發(fā)工具)是一個寫Java的applet和應(yīng)用程序的程序開發(fā)環(huán)境。它由一個處于操作系統(tǒng)層之上的運行環(huán)境還有開發(fā)者編譯,調(diào)試和運行用Java語言寫的applet和應(yīng)用程序所需的工具組成
    2014-01-01
  • 基于restTemplate遇到的編碼問題及解決

    基于restTemplate遇到的編碼問題及解決

    這篇文章主要介紹了restTemplate遇到的編碼問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中的ReentrantLock、ReentrantReadWriteLock、StampedLock詳解

    Java中的ReentrantLock、ReentrantReadWriteLock、StampedLock詳解

    這篇文章主要介紹了Java中的ReentrantLock、ReentrantReadWriteLock、StampedLock詳解,讀寫鎖:一個資源能夠被多個讀線程訪問,或者被一個寫線程訪問但是不能同時存在讀寫線程,需要的朋友可以參考下
    2024-01-01
  • IDEA2022創(chuàng)建SpringBoot項目的圖文教程

    IDEA2022創(chuàng)建SpringBoot項目的圖文教程

    本文主要介紹了IDEA2022創(chuàng)建SpringBoot項目的圖文教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 關(guān)于Spring中@Transactional事務(wù)回滾的注意事項

    關(guān)于Spring中@Transactional事務(wù)回滾的注意事項

    這篇文章主要介紹了關(guān)于Spring中@Transactional事務(wù)回滾的注意事項,回滾(Rollback)指的是程序或數(shù)據(jù)處理錯誤,將程序或數(shù)據(jù)恢復(fù)到上一次正確狀態(tài)的行為?;貪L包括程序回滾和數(shù)據(jù)回滾等類型,需要的朋友可以參考下
    2023-05-05
  • Java中Objects.equals踩坑記錄

    Java中Objects.equals踩坑記錄

    最近在工作中發(fā)現(xiàn)一個問題,覺著還是挺有必要記錄下的,這篇文章主要給大家介紹了關(guān)于Java中Objects.equals踩坑的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Java ArrayList與LinkedList及HashMap容器的用法區(qū)別

    Java ArrayList與LinkedList及HashMap容器的用法區(qū)別

    這篇文章主要介紹了Java ArrayList與LinkedList及HashMap容器的用法區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-07-07
  • Java中使用Java?Mail實現(xiàn)郵件服務(wù)功能示例

    Java中使用Java?Mail實現(xiàn)郵件服務(wù)功能示例

    這篇文章主要介紹了Java中使用Java?Mail實現(xiàn)郵件服務(wù)功能的相關(guān)資料,文章還提供了一個發(fā)送郵件的示例代碼,包括創(chuàng)建參數(shù)類、郵件類和執(zhí)行結(jié)果,需要的朋友可以參考下
    2025-01-01
  • Mybatis實體類和表映射問題(推薦)

    Mybatis實體類和表映射問題(推薦)

    在項目開發(fā)中我們經(jīng)常會遇到表中的字段名和表對應(yīng)實體類的屬性名稱不一定都是完全相同的。下面小編給大家介紹下這種情況下如何解決字段名與實體類屬性名不相同的沖突問題。下面小編給大家?guī)砹薓ybatis實體類和表映射的解決方法,小伙伴們一起學(xué)習(xí)吧
    2016-09-09
  • spring boot整合RabbitMQ(Direct模式)

    spring boot整合RabbitMQ(Direct模式)

    springboot集成RabbitMQ非常簡單,如果只是簡單的使用配置非常少,springboot提供了spring-boot-starter-amqp項目對消息各種支持。下面通過本文給大家介紹下spring boot整合RabbitMQ(Direct模式),需要的朋友可以參考下
    2017-04-04

最新評論

疏附县| 建湖县| 澄江县| 仙游县| 长汀县| 盘锦市| 大厂| 广河县| 汶川县| 遵义县| 新邵县| 湘潭市| 文登市| 库伦旗| 汉中市| 德化县| 宝坻区| 岑溪市| 芜湖县| 肃宁县| 汝城县| 舟曲县| 崇明县| 保山市| 民和| 北海市| 于田县| 平阳县| 葵青区| 缙云县| 三亚市| 家居| 沈丘县| 黎平县| 综艺| 三门县| 芜湖县| 佛山市| 丁青县| 仁怀市| 蒙山县|