我以前使用下面的函數爲什麼這些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