Heim  >  Artikel  >  Java  >  Beim Konvertieren von Byte[] in String in Java erscheinen verstümmelte Zeichen

Beim Konvertieren von Byte[] in String in Java erscheinen verstümmelte Zeichen

王林
王林Original
2019-11-27 09:28:0010362Durchsuche

Beim Konvertieren von Byte[] in String in Java erscheinen verstümmelte Zeichen

Zuallererst ist es sehr einfach, das häufig verwendete Byte[] direkt in einen String umzuwandeln:

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);  
}

Empfohlene Java-bezogene Videos: Java-Lernen

Das Ausgabeergebnis von oben lautet beispielsweise:

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

Sie werden die Codierung kennen, wenn Sie dies sehen. Byte ist ein Byte und chinesische Zeichen sind zwei Bytes. Daher erfordern fünf chinesische Schriftzeichen einen digitalen Speicher von zehn Byte. Dann werden die Zahlen in chinesische Schriftzeichen umgewandelt, und in der Mitte erfolgt ein Prozess zur Kodierung von Standards.

Wie wird die Zeichenkodierung in Java gehandhabt?

JAVA verwendet seine eigene String-Klasse und String-Klassenobjekte müssen keine Codierungstabelle angeben! Warum weiß es, welche Zeichen die einzelnen Zahlen darstellen? Dies liegt daran, dass die Zeicheninformationen in String in der UNICODE-Codierung gespeichert werden. Zur Darstellung von Zeichen (beachten Sie, dass es sich um Einzelzeichen handelt) verfügt JAVA auch über den Datentyp char und seine Größe ist eine feste Länge von zwei 8-stelligen Hexadezimalziffern, also 0 bis 65535. Der Zweck besteht darin, einem Zeichen in UNICODE zu entsprechen.

Wenn Sie eine UNICODE-Nummer in einem String erhalten möchten, können Sie die Methode getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) verwenden, um ein char[] zu erhalten. Dieses char[] stellt das String-Zeichen dar und ist eine in der UNICODE-Codierung codierte Zahl Tisch.

Warum gibt es verstümmelten Code beim Konvertieren von Byte[] in String?

Wie oben erwähnt, sind die Codierungsstandards natürlich unterschiedlich. Beispielsweise wird das chinesische Wort „dang“ im GB2312-Standard durch zwei achtstellige Zahlen 0xB5 und 0xB1 dargestellt. Auf dem englischen System gibt es keine GB2312-Codierungstabelle. Wenn Sie 0xB5, 0xB1 angeben, wird es als ASCII behandelt. Wenn Sie es in Java einfügen, wird es gemäß seiner eigenen UNICODE-Spezifikation verarbeitet. Wenn die Spezifikationen also unterschiedlich sind, werden seltsame Ergebnisse angezeigt, dh verstümmelte Zeichen.

Wie lösen wir also das verstümmelte Problem der Konvertierung von Byte[] in String?

Es hängt davon ab, woher byte[] kommt. Es kommt häufig vor, dass ein Bild in ein Byte [] und dann in ein String-Stream-Objekt umgewandelt werden muss, um es an andere Orte zu übertragen. Der Empfänger wandelt es dann in ein Byte [] und dann in ein Bild um.

1. Wenn Byte[] direkt übertragen wird, kommt es zu Datenverlust, wenn Byte[] zu lang ist. Denn nicht alle Bytekombinationen können auf char abgebildet werden.

2. Verwenden Sie die allgemeine Base64-Kodierungsspezifikation. Die Codierungsspezifikation von Base64 besteht darin, allgemeine Zeichen in eine 6-Bit-Binärdarstellung umzuwandeln (64 werden häufig verwendet, daher wird es Base64 genannt). Wie man schreibt, gibt es vorgefertigte Werkzeugklassen wie folgt:

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);  
    }  
}

Auf diese Weise kann die Standardkonvertierung zwischen Byte[] und String gewährleistet werden.

Weitere verwandte Artikel und Tutorials werden empfohlen: Erste Schritte mit Java von Grund auf

Das obige ist der detaillierte Inhalt vonBeim Konvertieren von Byte[] in String in Java erscheinen verstümmelte Zeichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn