真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么解決java中byte[]轉(zhuǎn)成String的亂碼問題

怎么解決java中byte[]轉(zhuǎn)成String的亂碼問題?針對這個問題,今天小編總結(jié)了這篇文章,希望能幫助更多想解決這個問題的朋友找到更加簡單易行的辦法。

創(chuàng)新互聯(lián)建站專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、陜西網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5商城網(wǎng)站制作、集團公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為陜西等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

首先常用的byte[]直接轉(zhuǎn)String很簡單:

public static void main(String[] args) {  
String str="我是中國人";  
byte[] arr=str.getBytes();  
System.out.println("打?。?+arr);
for(byte e : arr) {
System.out.print(e + " ");
}
String str2=new String(arr);  
System.out.println("\n打印2:"+str2);  
}

比如上面這個,輸出的結(jié)果是:

打?。篬B@15db9742
-50 -46 -54 -57 -42 -48 -71 -6 -56 -53 
打印2:我是中國人

看到這個就知道編碼了。byte是一個字節(jié),漢字是兩個字節(jié)。所以五個漢字要十個byte類型的數(shù)字存儲。然后數(shù)字變成漢字,這中間就是走了一個編碼規(guī)范的過程。

java中是如何處理字符編碼的?

JAVA使用自己的String類,并且String類對象是不需要指定編碼表的!為什么它會自己知道一堆數(shù)字各代表什么字符呢?就是因為String里的字符信息是用UNICODE編碼存放的。而JAVA為了表示字符(注意是單個字符),也有char這個數(shù)據(jù)類型,而且他的大小是固定2個8位16進制數(shù)字長度,也就是0~65535。為的就是對應(yīng)UNICODE里面的一個字符。

大家如果想取一個String里的按UNICODE數(shù)字,可以用getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 方法取得一個char[],這個char[]里就是表示String字符的,按UNICODE編碼表編碼的數(shù)字。

為什么byte[ ]轉(zhuǎn)String會出現(xiàn)亂碼現(xiàn)象?

很顯然,就是上面提到的,編碼規(guī)范不一樣。舉個栗子,比如GB2312規(guī)范的中文“當(dāng)”字,就是用0xB5,0xB1這兩個八位的數(shù)字來表示的。在英文系統(tǒng)上,沒有GB2312編碼表,給他一個0xB5,0xB1,他就傻傻的當(dāng)作ASCII來處理。放到Java里,他又會按照自己的UNICODE規(guī)范來處理,所以規(guī)范不一樣,就會出現(xiàn)奇怪的結(jié)果,也就是亂碼。

怎么解決byte[ ]轉(zhuǎn)String的亂碼問題呢?

得看byte[]來自哪里了。時常會遇到,要把一張圖片轉(zhuǎn)為byte[]然后在轉(zhuǎn)為String流對象傳輸?shù)絼e的地方,接收者再轉(zhuǎn)為byte[]再變成圖片。

1、直接傳輸byte[]的話,會出現(xiàn)byte[]過長數(shù)據(jù)丟失。因為不是所有的byte組合都可以映射成char。

2、用常見的Base64編碼規(guī)范吧。base64的編碼規(guī)范就是將常見的字符轉(zhuǎn)換成6位二進制表示(常用64個所以叫base64吧)。怎么寫,有現(xiàn)成的工具類哦如下:

import org.apache.commons.codec.binary.Base64;  
public class UtilHelper {     
    //base64字符串轉(zhuǎn)byte[]  
    public static byte[] base64String2ByteFun(String base64Str){  
        return Base64.decodeBase64(base64Str);  
    }  
    //byte[]轉(zhuǎn)base64  
    public static String byte2Base64StringFun(byte[] b){  
        return Base64.encodeBase64String(b);  
    }  
}

這樣就可以保證byte[]和String之間的標(biāo)準(zhǔn)轉(zhuǎn)換了。

關(guān)于解決java中byte[]轉(zhuǎn)成String亂碼問題的方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


網(wǎng)站標(biāo)題:怎么解決java中byte[]轉(zhuǎn)成String的亂碼問題
轉(zhuǎn)載來源:http://weahome.cn/article/jeeisd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部