2014-10-03 4 views
-2

이 작은 테스트 케이스를 작성하여 base64 인코딩을 이해하려고했지만이 문제가 발생했습니다..net 문자열 유형 - 기본적으로 utf16입니까?

왜 "stringUtf16"과 Encoding.Default의 "stringDefault"가 동일하지 않은 이유는 무엇입니까? 하나는 길이가 4이고 다른 하나는 길이가 3이지만 화면에 같은 것을 표시합니다.

감사합니다.

[TestMethod] 
    public void EncodingTest() 
    { 
     var raw = new byte[] { 0x63, 0xE8, 0x3F }; 
     string stringUtf16 = "cè?"; // .Net uses UTF-16 encoding by default 
     Console.WriteLine("Utf16: " + stringUtf16); 
     string encodedBase64 = "Y+g/"; 

     stringUtf16.Length.Should().Be(4); 

     //------ Verify Encodings 
     var stringDefault = Encoding.Default.GetString(raw); 
     Console.WriteLine("Default: " + stringDefault); 
     stringDefault.Length.Should().Be(3); 
     // stringDefault.Should().Be(stringUtf16); // FAILS HERE! 

     var stringUnicode = Encoding.Unicode.GetString(raw); 
     Console.WriteLine("Unicode: " + stringUnicode); 
     stringUnicode.Should().NotBe(stringUtf16); 

     var stringAscii = Encoding.ASCII.GetString(raw); 
     Console.WriteLine("Ascii: " + stringAscii); 
     stringAscii.Should().NotBe(stringUtf16); 

     var stringUtf8 = Encoding.UTF8.GetString(raw); 
     Console.WriteLine("UTF8: " + stringUtf8); 
     stringUtf8.Should().NotBe(stringUtf16); 

     string stringBase64 = Convert.ToBase64String(raw); 
     Console.WriteLine("Base64: " + stringBase64); 
     stringBase64.Should().NotBe(stringUtf16); 
     stringBase64.Should().Be(encodedBase64); 


     //------ Verify Decodings 
     byte[] decodedBytes = Convert.FromBase64String(encodedBase64); 
     decodedBytes.Length.Should().Be(3); 

     string decodedText = Encoding.Default.GetString(decodedBytes); 
     Console.WriteLine(decodedText); 
     decodedText.Length.Should().Be(3); 
     decodedText.Should().Be(stringDefault); 
    } 

답변

0

예. 문서를 보시려면 ref을보십시오.

각 코드 포인트는 UTF-16 인코딩을 사용하여 인코딩된다

...