c# - 为什么不是 `Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(x))==x`

标签 c# utf-8

在 .NET 中为什么不是这样:

Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(x))

返回任意字节数组 x 的原始字节数组?

mentioned在回答另一个问题时,回答者没有解释原因。

最佳答案

首先,正如 watbywbarif 提到的,您不应该使用 == 来比较序列,那是行不通的。

但即使您正确地比较了数组(例如,通过使用 SequenceEquals() 或仅仅通过查看它们),它们也不总是相同的。可能发生这种情况的一种情况是 x 是无效的 UTF-8 编码字符串。

例如,0xFF 的 1 字节序列不是有效的 UTF-8。那么 Encoding.UTF8.GetString(new byte[] { 0xFF }) 返回什么?它是 �,U+FFFD,替换字符。当然,如果您对此调用 Encoding.UTF8.GetBytes(),它不会返回 0xFF

关于c# - 为什么不是 `Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(x))==x`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9740553/

相关文章:

php - 使用 PHP 在 MySQL 中损坏 UTF8 字符

c# - 始终获取依赖属性的 PropertyChangedCallback - Silverlight

javascript - 从远程服务器获取一个 JSON 文件(包含希伯来语值)并在 Node.js 中解析它

c - 如何将 UTF-8 字符串写入 Windows 控制台?

c# - 从 Win32_TCPIPPrinterPort 检索主机地址时出现问题

php - utf8_general_ci 转换

node.js - 为什么nodejs HTTP响应不能写汉字?

c# - 没有文件扩展名的C#搜索结果

c# - 缺少 xml 根元素

c# - 使用 C# 属性跟踪函数调用、变量和返回值?