大家在開發(fā)中可能經(jīng)常遇到將String字符串轉(zhuǎn)為byte[]的場景,為了避免中文亂碼,一般指定字符集為GBK或UTF-8來進(jìn)行編碼以及解碼,但是如果使用不當(dāng),同樣會(huì)造成字符集亂碼問題。
主要原因是進(jìn)行編碼以及解碼的字符集不一致導(dǎo)致
所以,在解決字符集亂碼問題時(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()**通過在JVM啟動(dòng)時(shí)通過
-Dfile.encoding=UTF-8
參數(shù)來進(jìn)行設(shè)置。此方式只支持在jvm啟動(dòng)時(shí)設(shè)置一次,不支持在運(yùn)行期修改。文章來源:http://www.zghlxwxcb.cn/news/detail-556408.html -
System.getProperty(“file.encoding”) 獲取的是操作系統(tǒng)的編碼,可以通過
System.setProperty("file.encoding","UTF-8")
進(jìn)行修改(此修改不會(huì)影響操作系統(tǒng),重啟jvm后丟失),支持在運(yùn)行期修改。文章來源地址http://www.zghlxwxcb.cn/news/detail-556408.html
到了這里,關(guān)于Java使用UTF-8或GBK編碼后還是亂碼的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!