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