我有这段代码可以异步编写文件:
private static async Task WriteTextAsync(string filePath, string text)
{ //Writes to our output files
byte[] encodedText = Encoding.UTF8.GetBytes(text);
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Create, FileAccess.Write, FileShare.None,
bufferSize: 4096, useAsync: true))
{
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
};
}
尽管设置了Encoding.UTF8
. 该类有 15 个重载构造函数,FileStream
如果不在编码文本上,我应该在哪里设置它对我来说根本不明显。
我可以知道该文件是 ANSI,因为当我在 TextPad 中打开它并查看文件统计信息时,它会将 ANSI 列为代码集:
有问题,因为 MySQLLOAD INFILE
没有正确读取文件,在阅读了答案后,我相信它与 BOM 有关系,但不确定。
我试过这个(对于BOM):
byte[] encodedText = new byte[] { 0xEF, 0xBB, 0xBF }.Concat(Encoding.UTF8.GetBytes(text)).ToArray();
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Create, FileAccess.Write, FileShare.None,
bufferSize: 4096, useAsync: true))
{
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
};
Textpad 然后将其视为 UTF8,MySQLLOAD INFILE
仍然失败。在 Textpad 中重新保存,MySQL 正确地看到了它。
将代码更改为:
using (TextWriter writer = File.CreateText(filePath))
{
await writer.WriteAsync(text);
}
这似乎对两者都有效。我不确定 MySQL 有什么问题LOAD INFILE
。