首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于二进制数据,byte[] to UTF8 to JSON string是一种安全的编码方式吗?

对于二进制数据,byte[] to UTF8 to JSON string是一种安全的编码方式吗?
EN

Stack Overflow用户
提问于 2021-07-26 18:35:19
回答 1查看 90关注 0票数 0

我希望在一个文本文件中记录对我的web API的HTML POST请求的正文。我想让“人类可读的”字符易于查看,所以我不想把它编码成base64,但我还需要对所有非“人类可读的”字节进行安全编码,以便它们总是可以恢复到与输入数组完全相同的byte[]中。

下面的代码是否总是安全地将所有不可读的字节存储为JSON转义序列,同时存储可读字符本身?

代码语言:javascript
复制
byte[] bodyBytes = GetBodyBytes(ctx);
var bodyString = System.Text.Encoding.UTF8.GetString(bodyBytes);
var safeString = Newtonsoft.Json.JsonConvert.SerializeObject(new { bodyString });

我马上就能看到的一个问题是,这将把换行符序列简单地存储为\n,丢失了关于它们使用的是Windows型还是unix型换行符字节的数据。我如何避免丢失任何这样的数据,同时在可能的情况下保持人类可读?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-26 20:22:55

最后,我使用了自己的编码,因为对于现有的编码方案来说,我的需求可能太具体了,无法完全实现。下面是我创建的方法:

代码语言:javascript
复制
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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68528387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档