【发布时间】:2021-07-26 20:22:54
【问题描述】:
我希望将 HTML POST 请求的正文记录到我的 Web 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 样式的换行字节的数据。我怎样才能避免丢失任何此类数据,同时尽可能保持人类可读?
【问题讨论】:
-
所有其他控制字符也可能有问题;不同的编码可能是一个更好的主意
-
请记住,当您从字节数组转到字符串时,您就是在de编码。并非所有字节序列都有效地表示 UTF-8 数据。此外,您显示的示例代码在计算后不使用
bodyString。 -
将原始二进制数据转换为 UTF-8 字符串绝不是一个好主意。 UTF-8 是一个复杂的规范,其中包含许多可能会影响您的数据的意外特殊情况。为什么不将数据保存为 byte[] 并直接从 byte[] 解析?
-
@KarlKnechtel 那是个错误;已编辑。
-
@罗伯特我可以;我希望有一些标准的“安全”方式来做到这一点,这样很多可读的字符,如
[a-z-A-Z0-9]等将按字面意思表示,因此可以快速阅读,而其他所有内容都会被转义。我可能会自己动手,但如果有人已经做过就更好了。