2017-05-01 23 views
1

私はこの質問がおそらくばかげていることを理解していますが、ちょっと荒い日です。とにかく、これを与えられた:バイト配列を文字列に変換して戻す

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) 

なぜalpha == gamma?これを行う正しい方法は何ですか?

更新:Base64のエンコーディング/デコードの作業を参照してください。しかし、私はまだUTF-8がなぜそうでないかに興味があります。おそらく、1つ以上のバイトのUTF-8表現がないためです。

答えて

2

UTF-8は、1〜4バイトの符号なし値を使用します。 そのような値をアンダーフローさせたときに実際に取得しているUTF-8値を特定する必要があります。

new String(alpha) == new String(gamma)にチェックを付けると、trueを返すことがわかります。

関連する問題