我编写了这个小测试用例来尝试理解base64编码,但我遇到了这个问题。
见下文,为什么" stringUtf16"和#34; stringDefault"来自Encoding.Default不相等? 一个长度为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 :(得分:0)
是。请查看文档:{{3}}。
每个代码点都使用UTF-16编码进行编码......