출력:
[-106, -85, 78, 22, 63, 78, -32, 58, -86, 77, 16, 81, -86, 81, -46, 4]
[-17, -65, -67, -17, -65, -67, 78, 22, 63, 78, -17, -65, -67, 58, -17, -65, -67, 77, 16, 81, -17, -65, -67, 81, -17, -65, -67, 4]
인코딩 전 출력과 인코딩 후 디코딩이 다른 이유는 무엇인가요?
黄舟2017-05-27 17:43:40
아마도 그럴 거라고(new String(b)).getBytes().equals(b)
,实际上并非如此。(尽管new String(s.getBytes()).equals(s)
생각하실 겁니다. )
Becausebyte[]
转换成String
时,有些字节是未必能转换成字符的,比如第一个-106
、第二个-85
就是,所以转换成String
时前两个就变成了未知字符(表面上会显示?
,但实际上是一个Unicode字符),再转成byte[]
(你这边defaultCharset
应该是UTF-8
) 각각의 알 수 없는 문자는 3바이트가 됩니다.
GBK를 사용하는 경우 상황은 나쁘지 않지만 여전히 약간 다릅니다.
으아아아결론은 다음과 같습니다. 해시 값을 표현하기 위해 문자열을 사용하는 경우 byte[]를 문자열로 강제 변환할 수는 없지만 평소대로 16진수 표현으로 변환합니다.