亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么解決java中byte[]轉成String的亂碼問題

發布時間:2020-06-23 21:25:10 來源:億速云 閱讀:1553 作者:Leah 欄目:編程語言

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

首先常用的byte[]直接轉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);  
}

比如上面這個,輸出的結果是:

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

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

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

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

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

為什么byte[ ]轉String會出現亂碼現象?

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

怎么解決byte[ ]轉String的亂碼問題呢?

得看byte[]來自哪里了。時常會遇到,要把一張圖片轉為byte[]然后在轉為String流對象傳輸到別的地方,接收者再轉為byte[]再變成圖片。

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

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

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

這樣就可以保證byte[]和String之間的標準轉換了。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江安县| 苗栗县| 大埔区| 苏尼特右旗| 手机| 鄂温| 三原县| 安义县| 西青区| 惠水县| 嵊泗县| 从化市| 新闻| 东安县| 东阳市| 开江县| 盐城市| 楚雄市| 同江市| 广东省| 青铜峡市| 通州区| 杭锦后旗| 习水县| 纳雍县| 黄平县| 仪征市| 浙江省| 桃园市| 宣汉县| 宕昌县| 赤水市| 文水县| 尚义县| 丁青县| 开江县| 宜君县| 陇川县| 乌拉特后旗| 峨山| 江阴市|