我以前使用下面的函数为什么这些NUL的出现
using (FileStream fs = new FileStream(Settings.PsLog, FileMode.Truncate, System.Security.AccessControl.FileSystemRights.Write, FileShare.ReadWrite, 1024, FileOptions.None, null))
{
foreach (string line in checkList)
{
byte[] encodedText = Encoding.Unicode.GetBytes(line + Environment.NewLine);
await fs.WriteAsync(encodedText, 0, line.Length);
}
}
写了很多不同的文件,因为这些代码被复制粘贴一回事,我决定把它解压到一个更广泛的功能。
private static async Task WriteTextAsync(string filePath, string text)
{
byte[] encodedText = Encoding.Unicode.GetBytes(text + Environment.NewLine);
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Append, FileAccess.Write, FileShare.Write,
bufferSize: 1024, useAsync: true))
{
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
};
}
使用提取的版本随机NUL的追加到文本
在哪里这些零点从哪里来但是经过?我试着复制filestream()
设置1,但即使这样NUL也发生了。
'Encoding.Unicode'是一种UTF-16编码。检查'byte'数组,它应该包含多个'0'字节。改用'Encoding.UTF8'。 –
@JeanHominal似乎是这样。但是,函数A怎么来没有这个问题,而函数B呢。即使给出了相同的输入,并采取了相同的步骤? –
这应该总是添加了NUL(实际上你明确地添加它们)。也许它在截断文件之前看起来很正确,因为编码是自动检测的(您可以通过在十六进制编辑器中打开它来测试),但另一种方式是将其附加到文件上,该文件可能具有UTF8 BOM(再次检查一个十六进制编辑器),无论如何开始一堆简单的ascii,这将愚弄读者的格式 – harold