byte[] to UTF8 to JSON string 是二进制数据的安全编码吗?

Is byte[] to UTF8 to JSON string a safe encoding for binary data?

我希望将 HTML POST 请求的正文记录到我的网站 API 中的文本文件中。我想要它,以便“人类可读”的字符可以轻松查看,所以我不想将其编码为 base64,但我还需要对所有非“人类可读”的字节进行安全编码,以便它们可以始终恢复为与输入数组完全相同的 byte[]

以下代码是否始终将所有不可读字节安全地存储为 JSON 转义序列,同时将可读字符存储为它们本身?

byte[] bodyBytes = GetBodyBytes(ctx);
var bodyString = System.Text.Encoding.UTF8.GetString(bodyBytes);
var safeString = Newtonsoft.Json.JsonConvert.SerializeObject(new { bodyString });

我可以立即看到的一个问题是,这会将换行符序列简单地存储为 \n,丢失有关它们是否使用 Windows- 或 Unix 样式的换行符字节的数据。我怎样才能避免丢失任何此类数据,同时尽可能保持人类可读性?

最后,我推出了自己的编码,因为我的要求对于现有的编码方案来说可能过于具体,无法完全实现。这是我创建的方法:

private string UltraSafeEncode(byte[] bytes) {
    if (bytes == null) {
        throw new ArgumentNullException(nameof(bytes));
    }

    var sb = new System.Text.StringBuilder();

    foreach (var thisByte in bytes) {
        if (thisByte < 32 || thisByte == 92 || thisByte > 126) {
            sb.Append('\').AppendFormat("{0:x2}", thisByte);
            continue;
        }

        sb.Append((char)thisByte);
    }

    return sb.ToString();
}