Java使用UTF-8或GBK編碼后還是亂碼問(wèn)題的解決辦法
前言
大家在開(kāi)發(fā)中可能經(jīng)常遇到將String字符串轉(zhuǎn)為byte[]的場(chǎng)景,為了避免中文亂碼,一般指定字符集為GBK或UTF-8來(lái)進(jìn)行編碼以及解碼,但是如果使用不當(dāng),同樣會(huì)造成字符集亂碼問(wèn)題。
主要原因是進(jìn)行編碼以及解碼的字符集不一致導(dǎo)致
所以,在解決字符集亂碼問(wèn)題時(shí)一般情況下會(huì)顯示指定編碼和解碼字符集。
// 編碼 byte[] bytes = “中文”.getBytes(“UTF-8”); // 解碼 new String(bytes,“UTF-8”);
不顯式指定時(shí)一般會(huì)使用默認(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()**通過(guò)在JVM啟動(dòng)時(shí)通過(guò)
-Dfile.encoding=UTF-8參數(shù)來(lái)進(jìn)行設(shè)置。此方式只支持在jvm啟動(dòng)時(shí)設(shè)置一次,不支持在運(yùn)行期修改。 - System.getProperty(“file.encoding”) 獲取的是操作系統(tǒng)的編碼,可以通過(guò)
System.setProperty("file.encoding","UTF-8")進(jìn)行修改(此修改不會(huì)影響操作系統(tǒng),重啟jvm后丟失),支持在運(yùn)行期修改。
總結(jié)
到此這篇關(guān)于Java使用UTF-8或GBK編碼后還是亂碼問(wèn)題的解決辦法的文章就介紹到這了,更多相關(guān)Java字符集亂碼問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)整數(shù)的逆序輸出的三種方法
這篇文章主要介紹了Java實(shí)現(xiàn)整數(shù)的逆序輸出的三種方法,第一種是無(wú)限制整數(shù)的逆序輸出,第二種是非負(fù)整數(shù)的逆序輸出,第三種是非特殊情況的逆序輸出,每種方法給大家講解的非常詳細(xì)需要的朋友可以參考下2022-11-11
java中的Lambda表達(dá)式使用及說(shuō)明
文章介紹了Java?8中Lambda表達(dá)式的基本概念及其在Stream流操作中的應(yīng)用,Lambda表達(dá)式簡(jiǎn)化了函數(shù)式接口的實(shí)現(xiàn),與Stream結(jié)合使用更流暢,文章還提供了Lambda表達(dá)式的各種簡(jiǎn)化技巧和注意事項(xiàng),如方法引用、變量捕獲規(guī)則以及異常處理等2026-05-05
Java實(shí)現(xiàn)JS中的escape和UNescape代碼分享
在PHP和Python中都有類(lèi)似JS中的escape和UNescape函數(shù)的功能,那么Java語(yǔ)言中到底有沒(méi)有類(lèi)似的方法呢?本文就來(lái)介紹一下Java實(shí)現(xiàn)JS中的escape和UNescape轉(zhuǎn)碼方法,需要的朋友可以參考下2017-09-09
java解析json復(fù)雜數(shù)據(jù)的方法詳解
這篇文章主要為大家詳細(xì)介紹了java解析json復(fù)雜數(shù)據(jù)的兩種常用方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以了解下2024-01-01
Java 實(shí)戰(zhàn)項(xiàng)目錘煉之醫(yī)院門(mén)診收費(fèi)管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+html+jdbc+mysql實(shí)現(xiàn)一個(gè)醫(yī)院門(mén)診收費(fèi)管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11

