2013-07-10 22 views
15

Come posso convertire un array di bytes a String senza conversione ?.Come convertire la matrice di byte in stringa in Java?

ho provato:

String doc=new String(bytes); 

Ma il file doc non è lo stesso che il byte (i byte sono informazioni binarie). Per esempio:

String doc=new String(bytes); 
    byte[] bytes2=doc.getBytes(); 

bytes e bytes2 sono diversi.

PS: UTF-8 Non funziona perché converte alcuni byte in valori diversi. Ho provato e non funziona.

PS2: E no, non voglio BASE64.

+0

è necessario utilizzare una codifica corretta – nachokk

+0

@TheNewIdiot la risposta in questo post non risolve nulla. Desidero una conversione da byte a byte e la risposta dice "convertilo o busto". Com'è possibile che Java non possa farlo? – magallanes

+0

Java distingue nettamente tra dati binari (byte) e testo (stringa). Per il testo hanno scelto internamente Unicode, quindi tutte le lingue sono coperte. Anche se puoi usare una codifica come ISO-8559-1 per convertire i byte come sono per una stringa e viceversa, queste stringhe potrebbero avere artefatti come un binario 0. –

risposta

13

È necessario specificare la codifica che si desidera per esempio per UTF-8

String doc = .... 
byte[] bytes = doc.getBytes("UTF-8"); 
String doc2 = new String(bytes, "UTF-8"); 

doc e doc2 sarà lo stesso.

Per decodificare uno byte[] è necessario sapere quale codifica è stata utilizzata per assicurarsi che decodifichi correttamente.

9

Ecco un modo per convertire un array di byte in un String e ritorno:

String doc=new String(bytes, "ISO-8859-1"); 
byte[] bytes2=doc.getBytes("ISO-8859-1"); 

Un String è una sequenza di caratteri, quindi dovrete codificare in qualche modo byte come caratteri. La codifica ISO-8859-1 esegue il mapping di un singolo carattere univoco per ogni byte, quindi è sicuro utilizzarlo per la conversione. Si noti che altre codifiche, come UTF-8, non sono sicure in questo senso perché ci sono sequenze di byte che non si associano a stringhe valide in tali codifiche.

+0

Funziona in Java, poiché anche lo 0 binario (terminatore di stringa C) funziona bene. –

+0

Grandemente aiutato! Altrimenti, avrei lottato con byte []! – AVA

+2

Un bel consiglio riguardo alla codifica 'ISO-8859-1'. – tarka

1

La "conversione corretta" tra byte [] e String è quello di indicare esplicitamente la codifica che si desidera utilizzare. Se si inizia con un byte [] e in realtà non contiene dati di testo, non esiste una "conversione corretta". Le stringhe sono per il testo, byte [] per i dati binari e l'unica cosa veramente sensata da fare è evitare di convertirle tra loro a meno che non sia assolutamente necessario.

Se davvero si deve utilizzare una stringa per contenere i dati binari, il modo più sicuro è utilizzare la codifica Base64.

Source da Michael Borgwardt

+0

Cosa succede se la stringa è solo una rappresentazione? e alla riconversione all'array di byte usiamo metodi di conversione adeguati? – Eftekhari

Problemi correlati