.net 如何知道在将字符串转换为字节数组时使用的编码方案?

.net 如何知道在将字符串转换为字节数组时使用的编码方案?,.net,string,encoding,.net,String,Encoding,从我的数据库中,我得到一个很长的字符串,基本上是xml。 我需要把它改成字节数组 我无法理解潜在的编码问题 进行此转换时,我需要注意什么 public static byte[] StringToByteArray1(string str) { return Encoding.ASCII.GetBytes(str); } public static byte[] StringToByteArray2(string str) {

从我的数据库中,我得到一个很长的字符串,基本上是xml。 我需要把它改成字节数组

我无法理解潜在的编码问题

进行此转换时,我需要注意什么

 public static byte[] StringToByteArray1(string str)
    {
        return Encoding.ASCII.GetBytes(str);
    }

    public static byte[] StringToByteArray2(string str)
    {
        return Encoding.UTF8.GetBytes(str);
    }

Encoding.ASCII.GetBytes vs Encoding.UTF8.GetBytes

您应该仅在传统代码兼容时使用ASCII,因为它实际上是ASCII。请注意,这是7位,不支持扩展字符

UTF-8通常是正常的(其他人可能不同意),并将为您提供8位值。首选使用Unicode(UTF-16)

您对字节数组所做的操作将影响您是想要ASCII、UTF-8还是Unicode


如果处理的是ASCII字符,则结果相同

另一方面,如果字符串中有非ASCII字符(例如π),则: 在ASCII编码中,这些将被替换为“?”

在UTF8中,它们将由一个(可能是几个字节的字符)表示

可能值得指出的是,在内部.NET使用UTF16对其字符串进行编码


一般来说,除非您有特定的理由不使用UTF8,否则最好使用UTF8。

在将字符串转换为字节并从应用程序中导出它们时,使用何种编码完全取决于将要读取这些字节并将其解释为字符串的程序

例如,如果您正在编写需要ASCII编码文件的程序读取的文件,则必须使用ASCII;如果读取程序需要代码页850,则需要使用该编码;如果需要UTF-8,则使用该编码,依此类推

但是,如果您正在写入一个将由您自己的程序读取的文件,我建议您使用UTF-8,因为这种编码似乎正在成为事实上的编码

最后,您应该知道编码是关于什么以及如何使用它。所以,如果你还没读过,你就得读乔尔·斯波尔斯基的文章。这是一篇很好的文章。读吧!是的,你必须这样做

希望这有帮助