C#中如何在不手动指定编码的情况下获得字符串的字节形式

如果不需要解释字节,则无需担心编码!

如果您的目标很简单,就是“获取字符串中存储了哪些字节”。

对于这些目标,老实说,我不明白为什么人们一直告诉您您需要编码。 您当然不需要为此担心编码。

只需这样做:

static byte[] GetBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;
}

static string GetString(byte[] bytes)
{
    char[] chars = new char[bytes.Length / sizeof(char)];
    System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
    return new string(chars);
}

只要您的程序(或其他程序)不需要以某种方式解释字节,您显然不需要知道当前字符串的编码,也不需要指定它的编码。担心编码只会让你的生活无缘无故变得更加复杂。

这种方法的额外好处:字符串是否包含无效字符并不重要,因为您仍然可以获取数据并重建原始字符串!

它将以相同的方式进行编码和解码,因为您只是在查看字节。

但是,如果您使用特定的编码,它会给您编码/解码无效字符的麻烦。