2017-12-23 14 views
0

나는 제거 0x00의 상위 바이트를 한 것을 알고 바이트의 배열로 표현 된 문자열이 같은 문자열이 압축되어 :압축 된 (상위 바이트를 제거한) 바이트를 유니 코드 문자열로 변환하는 방법?

0x43 0x6F 0x6D 0x6D 0x61 0x6E 0x64 //"Command" 

가 어떻게 유니 코드로 바이트를 변환 할 수 있습니다 끈?

byte[] compressedBytes = br.ReadBytes(stringLength); 
byte[] uncompressedBytes = new byte[stringLength * 2]; 
for (int byteCounter = 0; byteCounter < stringLength; byteCounter++) 
{ 
    uncompressedBytes[byteCounter * 2] = compressedBytes[byteCounter]; 
} 
return Encoding.Unicode.GetString(uncompressedBytes); 

또는 모든 바이트를 치료하는 것이다 인코딩이 :

나는 모든 초 간격으로 두 번 크기가되는 새로운 배열 (uncompressedBytes)로 바이트를 복사해야 같은데요 상위 바이트가없는 유니 코드 문자로?

답변

2

모든 바이트가 0x7f 이하인 경우 utf-8으로 처리하고 System.Text.UTF8Encoding 변환기 클래스를 사용할 수 있습니다.

+0

불행히도, 난하지 * 알고 * 모든 바이트에서 0x7f 이하인 것을. – ThunderFrame

+0

더 큰 유니 코드 값의 상위 바이트를 제거하면 데이터가 손상됩니다. 유니 코드에는 압축이없고, 단순히 바이트를 잘라 내지 않는 것은 아닙니다. 따라서 모든 바이트가 0x7F 이하이면 UTF-8과 호환되는 ASCII가됩니다. 0x80-0xFF 사이에 바이트가 있으면 ANSI, 대개 ISO-8859-1을 처리하지만 Windows-1252 또는 다른 인코딩도 처리합니다 –

관련 문제