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

时间:2009-01-16 18:51:02

标签: .net string encoding

从我的数据库中我得到一个非常长的字符串,基本上是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

3 个答案:

答案 0 :(得分:2)

如果您正在处理ASCII字符,那么结果是相同的。

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

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

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

一般情况下,除非有特殊原因,否则最好使用UTF8。

答案 1 :(得分:1)

将字符串转换为字节并从应用程序中导出时,使用什么编码取决于将要读取这些字节并将其解释为字符串的程序100%。

例如,如果您正在编写要由需要ASCII编码文件的程序读取的文件,则必须使用ASCII,如果读取程序需要CodePage 850,则需要使用该编码,如果需要UTF-8然后你使用那​​个编码等。

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

最后,您应该知道编码是什么以及如何使用它。所以如果你还没有读过它 - 你必须阅读Joel Spolskys的文章"The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)"。这是一篇非常好的文章。阅读!是的,你必须这样做。

希望这有帮助!

答案 2 :(得分:0)

您应该只使用ASCII来实现遗留代码兼容性,它确实是ASCII。请注意,这是7位,不支持扩展字符。

UTF-8通常没问题(其他人可能不同意),并会给你8位值。首选使用Unicode(UTF-16)。

您对字节数组执行的操作将影响您是否需要ASCII,UTF-8或Unicode。

Here's a nice reference.