What is the reason that Encoding.UTF8.GetString and Encoding.UTF8.GetBytes are not inverse of each other?
可能我遗漏了一些东西,但我不明白为什么encoding.utf8.getString和encoding.utf8.getBytes不能互相进行反向转换?
在下面的示例中,myoriginalbytes和asbytes不相等,即使它们的长度不同。有人能解释一下我遗漏了什么吗?
1 2 3 | byte[] myOriginalBytes = GetRandomByteArray(); var asString = Encoding.UTF8.GetString(myOriginalBytes); var asBytes = Encoding.UTF8.GetBytes(asString); |
如果从一个有效的UTF-8字节序列开始,它们是相反的,但是如果只是从一个任意的字节序列开始,它们就不是了。
让我们举一个具体且非常简单的例子:单字节,0xFF。这不是任何文本的有效UTF-8编码。如果你有:
1 2 | byte[] bytes = { 0xff }; string text = Encoding.UTF8.GetString(bytes); |
…最后,您会发现
如果您有任意的二进制数据,则不应该使用
如果你往相反的方向走,就像这样:
1 2 3 | string text = GetRandomText(); byte[] bytes = Encoding.UTF8.GetBytes(text); string text2 = Encoding.UTF8.GetString(bytes); |
…我希望