我希望在一个文本文件中记录对我的web API的HTML POST请求的正文。我想让“人类可读的”字符易于查看,所以我不想把它编码成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型换行符字节的数据。我如何避免丢失任何这样的数据,同时在可能的情况下保持人类可读?
发布于 2021-07-26 20:22:55
最后,我使用了自己的编码,因为对于现有的编码方案来说,我的需求可能太具体了,无法完全实现。下面是我创建的方法:
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();
}https://stackoverflow.com/questions/68528387
复制相似问题