Java實(shí)現(xiàn)UTF-8編碼與解碼方式
Java實(shí)現(xiàn)UTF-8編碼與解碼
Java代碼如下:
import java.net.URLDecoder;
import java.net.URLEncoder;
//URLDecoder.decode("%E5%A4%A9%E6%B4%A5","UTF-8");
public class URLDecoderTesT {
? ? public static void main(String[] args) throws Exception {
?
? ? ? ? // 將application/x-www-form-urlencoded字符串轉(zhuǎn)換成普通字符串
? ? ? ? // 其中的字符串直接從上圖所示窗口復(fù)制過來,chrome 默認(rèn)用 UTF-8 字符集進(jìn)行編碼,所以也應(yīng)該用對應(yīng)的字符集解碼
? ? ? ? System.out.println("采用UTF-8字符集進(jìn)行解碼:");
? ? ? ? String keyWord = URLDecoder.decode("%E9%99%88", "UTF-8");
? ? ? ? System.out.println(keyWord);
// ? ? ? ?System.out.println("\n 采用GBK字符集進(jìn)行解碼:");
// ? ? ? ?System.out.println(URLDecoder.decode("%E5%A4%A9%E6%B4%A5%E5%A4%A7%E5%AD%A6+Rico", "GBK"));
//?
// ? ? ? ?// 將普通字符串轉(zhuǎn)換成application/x-www-form-urlencoded字符串
? ? ? ? System.out.println("\n 采用utf-8字符集:");
? ? ? ? String urlStr = URLEncoder.encode("../../../../../../../etc/passwd", "utf-8");
? ? ? ? System.out.println(urlStr);
// ? ? ? ?System.out.println("\n 采用GBK字符集:");
// ? ? ? ?String urlStr2 = URLEncoder.encode("天津大學(xué)", "GBK");
// ? ? ? ?System.out.println(urlStr2);
? ? }
}推薦一個(gè)好的在線轉(zhuǎn)換網(wǎng)頁:https://www.bejson.com/enc/urlencode/

使用UTF-8或GBK編碼后還是亂碼的問題
大家在開發(fā)中可能經(jīng)常遇到將String字符串轉(zhuǎn)為byte[]的場景,為了避免中文亂碼,一般指定字符集為GBK或UTF-8來進(jìn)行編碼以及解碼,但是如果使用不當(dāng),同樣會造成字符集亂碼問題。
主要原因是進(jìn)行編碼以及解碼的字符集不一致導(dǎo)致
所以,在解決字符集亂碼問題時(shí)一般情況下會顯示指定編碼和解碼字符集。
// 編碼 byte[] bytes = “中文”.getBytes(“UTF-8”); // 解碼 new String(bytes,“UTF-8”);
不顯式指定時(shí)一般會使用默認(rèn)字符集進(jìn)行編碼或解碼,此時(shí)需要確保使用的獲取默認(rèn)字符集的方法一樣。
// 編碼 獲取默認(rèn)字符集方法為:Charset.defaultCharset().name() byte[] bytes =“中文”.getBytes(); // 解碼 獲取默認(rèn)字符集方法為:Charset.defaultCharset().name() new String(bytes);
以下列出兩種獲取默認(rèn)字符集的方法及區(qū)別:
Charset.defaultCharset().name();
System.getProperty("file.encoding")兩者的區(qū)別是
**Charset.defaultCharset()**通過在JVM啟動時(shí)通過-Dfile.encoding=UTF-8參數(shù)來進(jìn)行設(shè)置。此方式只支持在jvm啟動時(shí)設(shè)置一次,不支持在運(yùn)行期修改。
System.getProperty(“file.encoding”) 獲取的是操作系統(tǒng)的編碼,可以通過System.setProperty("file.encoding","UTF-8")進(jìn)行修改(此修改不會影響操作系統(tǒng),重啟jvm后丟失),支持在運(yùn)行期修改。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringMVC獲取HTTP中元素的實(shí)現(xiàn)示例
本文主要介紹了SpringMVC獲取HTTP中的元素,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
Java?Servlet響應(yīng)httpServletResponse過程詳解
HttpServletResponse是處理http響應(yīng)的對象,調(diào)用該對象的方法,設(shè)置到對象屬性的內(nèi)容,tomcat最終會組織為http響應(yīng)報(bào)文2022-02-02
jvm之java類加載機(jī)制和類加載器(ClassLoader)的用法
這篇文章主要介紹了jvm之java類加載機(jī)制和類加載器(ClassLoader)的用法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
使用SpringBoot+Prometheus+Grafana實(shí)現(xiàn)可視化監(jiān)控
本文主要給大家介紹了如何使用Spring?actuator+監(jiān)控組件prometheus+數(shù)據(jù)可視化組件grafana來實(shí)現(xiàn)對Spring?Boot應(yīng)用的可視化監(jiān)控,文中有詳細(xì)的代碼供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下2024-02-02
詳解idea maven項(xiàng)目如何使用lib下得jar包
這篇文章主要介紹了詳解idea maven項(xiàng)目如何使用lib下得jar包,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
SpringBoot實(shí)現(xiàn)application.yml文件敏感信息加密
本文主要介紹了SpringBoot實(shí)現(xiàn)application.yml文件敏感信息加密,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
java后端+前端使用WebSocket實(shí)現(xiàn)消息推送的詳細(xì)流程
后端向前端推送消息就需要長連接,首先想到的就是websocket,下面這篇文章主要給大家介紹了關(guān)于java后端+前端使用WebSocket實(shí)現(xiàn)消息推送的詳細(xì)流程,需要的朋友可以參考下2022-10-10
SpringBoot整合Redis使用注解進(jìn)行緩存方式
文章介紹了使用Redis進(jìn)行數(shù)據(jù)緩存的幾種方式,包括手動配置RedisTemplate、使用Spring的Caching模塊以及配置自定義的RedisCacheManager2025-03-03

