2017-05-01 4 views
1

Ich weiß, diese Frage ist wahrscheinlich idiotisch, aber hey, rauer Tag. Wie dem auch sei, da dies:Konvertieren von Byte-Array in String und wieder zurück

scala> import java.nio.charset.Charset 
import java.nio.charset.Charset 

scala> val alpha = Array[Byte](2,-9,-7,-126,-36,-41,-16,56) 
alpha: Array[Byte] = Array(2, -9, -7, -126, -36, -41, -16, 56) 

scala> val beta = new String(alpha, Charset.forName("UTF-8")) 
beta: String = ?������8 

scala> val gamma = beta.getBytes(Charset.forName("UTF-8")) 
gamma: Array[Byte] = Array(2, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, 56) 

Warum nicht alpha == gamma? Was ist der richtige Weg, dies zu tun?

Update: Ich sehe Base64 Codierung/Decodierung funktioniert. Aber ich bin immer noch daran interessiert, warum UTF-8 nicht. Vielleicht liegt es daran, dass es keine UTF-8-Repräsentation von einem oder mehreren dieser Bytes gibt.

Antwort

2

UTF-8 verwendet vorzeichenlose Werte von einem bis vier Byte. Sie müssten herausfinden, welche UTF-8-Werte Sie tatsächlich erhalten, wenn Sie die Werte so unterschreiten.

Wenn Sie new String(alpha) == new String(gamma) überprüfen, werden Sie sehen, dass es wahr zurückgibt.

Verwandte Themen