【问题标题】:Is it safe to encode and decode in c#?在 c# 中编码和解码是否安全?
【发布时间】:2013-10-02 06:10:13
【问题描述】:

在 c# 中,我可以通过Encoding.UTF8.GetString() 对二进制数据进行编码,然后再进行转换 由binary = Encoding.UTF8.GetBytes()回复。

我希望无论如何结果都应该是我的原始二进制数据 - 也不例外。

但无论如何都是真的吗?

还是取决于UTF8 字符集的具体行为?

或者我应该更好地使用Encoding.ASCII.GetString()Encoding.ASCII.GetBytes()

如果有人知道 Encoding 究竟做了什么(它如何处理特殊字符或特殊字节),请给我建议。

【问题讨论】:

    标签: c# encoding utf-8 binary data-conversion


    【解决方案1】:

    在 c# 中,我可以通过 Encoding.UTF8.GetString() 对二进制数据进行编码,然后通过 binary = Encoding.UTF8.GetBytes() 将其转换回来。

    不,因为这不是文本编码的作用

    文本编码将任意文本转换为结构化字节(意思是:以该编码定义的方式结构化)

    您有任意字节,而不是结构化字节。您应该使用 base-64 (Convert.ToBase64String / Convert.FromBase64String),它将任意字节转换为结构化字符串/从结构化字符串转换 - 在这种情况下,根据 base-64 的规则进行结构化。

    byte[] orig = ...
    string storeThis = Convert.ToBase64String(orig);
    // ...
    byte[] backAgain = Convert.FromBase64String(storeThis);
    

    【讨论】:

    • marc,但是这里的somestringsomestring2 应该总是一样的吧?自从我第一次将其转换为UTF8? string somestring = ...; string somestring2 = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(somestring));
    • @SriramSakthivel 是的,但这是一个不同的示例。这不是问题所描述的。问题描述的是:byte[] somebytes = ...; byte somebytes2 = Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(somebytes)); - 那是不会去工作
    • 我只是交叉检查了我的理解是否正确,我知道我的问题与 OP 提出的不同。谢谢马克
    【解决方案2】:

    当您期望字节采用 UTF8 编码时,您应该只使用 Encoding.UTF8。在 unknown 字节上使用 GetString() 可能会导致 意外 结果。

    所以如果你使用 Encoding.UTF8.GetBytes("Hello world!");您可以使用 Encoding.UTF8.GetString(byteArray); 将其恢复为字符串;

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多