我有一个内容为“test”的文本文件(UTF-8 编码)。我尝试从该文件中获取字节数组并将其转换为字符串,但它包含一个奇怪的字符。我使用以下代码:
var path = @"C:\Users\Tester\Desktop\test\test.txt"; // UTF-8
var bytes = File.ReadAllBytes(path);
var contents1 = Encoding.UTF8.GetString(bytes);
var contents2 = File.ReadAllText(path);
Console.WriteLine(contents1); // result is "?test"
Console.WriteLine(contents2); // result is "test"
conents1
不同于contents2
- why?
正如中所解释的ReadAllText的文档:
此方法尝试根据字节顺序标记的存在自动检测文件的编码。可以检测编码格式 UTF-8 和 UTF-32(大端和小端)。
所以该文件包含 BOM (字节顺序标记), and ReadAllText
方法正确地解释了它,而第一个方法只是读取纯字节,根本不解释它们。
Encoding.GetString说它只是:
decodes 所有字节将指定的字节数组转换为字符串
(强调我的)。这当然不完全是结论性的,但你的例子表明这应该从字面上理解。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)