C# 添加到文件开头的不规则字符
我正在学习微软关于创建和写入简单文件的教程,我得到了意想不到的结果 我实际上是在向文件中写入XML文本,而不是向文件中写入一系列数字。但它在一开始就添加了“Ł”,我不知道为什么 代码如下:C# 添加到文件开头的不规则字符,c#,C#,我正在学习微软关于创建和写入简单文件的教程,我得到了意想不到的结果 我实际上是在向文件中写入XML文本,而不是向文件中写入一系列数字。但它在一开始就添加了“Ł”,我不知道为什么 代码如下: public static void CreateFile(string xml) { var dateStamp = DateTime.Now.ToString("yyyy-MM-dd"); var fileName = "file_" + dateStam
public static void CreateFile(string xml)
{
var dateStamp = DateTime.Now.ToString("yyyy-MM-dd");
var fileName = "file_" + dateStamp + ".xml";
if (File.Exists(fileName))
{
Console.WriteLine("File already exists.");
return;
}
using (FileStream fileStream = new FileStream(fileName, FileMode.CreateNew))
{
using (BinaryWriter writer = new BinaryWriter(fileStream))
{
writer.Write(xml);
}
}
}
这是因为您正在使用
BinaryWriter
将数据写入文件。它将以稍后可以读取的方式写入字符串,因此它将首先将字符串长度写入文件,然后写入字符串数据
只需将文件改为文本文件即可。您可以使用StreamWriter
,或者只需使用File
类中的一个静态帮助器方法即可为您打开、写入和关闭文件:
File.WriteAllText(fileName, xml);
这是因为您正在使用
BinaryWriter
将数据写入文件。它将以稍后可以读取的方式写入字符串,因此它将首先将字符串长度写入文件,然后写入字符串数据
只需将文件改为文本文件即可。您可以使用StreamWriter
,或者只需使用File
类中的一个静态帮助器方法即可为您打开、写入和关闭文件:
File.WriteAllText(fileName, xml);
当您阅读本手册时,其内容如下: 将长度前缀字符串写入此流 所以“不适当”字符实际上是字符串的长度 您应该使用基于的编写器(例如)或任何其他可用的方法来输出文本文件
此外,您还应注意文本的编码具体地说,当您试图输出XML时,如果您使用.NET的XML操作方法构造它,并将其写入
字符串,则
指令可能会引用utf-16
编码。这是因为.NET的字符串使用两个字节字符。因此,在处理XML时,最好使用.NET的本机方法将XML序列化为文本输出(参见示例)。只有这样,才能确保在指令中正确指定编码。当您阅读本手册时,其内容如下:
将长度前缀字符串写入此流
所以“不适当”字符实际上是字符串的长度
您应该使用基于的编写器(例如)或任何其他可用的方法来输出文本文件
此外,您还应注意文本的编码具体地说,当您试图输出XML时,如果您使用.NET的XML操作方法构造它,并将其写入字符串,则
指令可能会引用utf-16
编码。这是因为.NET的字符串使用两个字节字符。因此,在处理XML时,最好使用.NET的本机方法将XML序列化为文本输出(参见示例)。只有这样,编码才会在
指令中正确指定。这是因为BinaryWriter
将写入字符串的长度(作为int)添加到前面
public static void CreateFile(string xml)
{
var dateStamp = DateTime.Now.ToString("yyyy-MM-dd");
var fileName = "file_" + dateStamp + ".xml";
if (File.Exists(fileName))
{
Console.WriteLine("File already exists.");
return;
}
using (FileStream fileStream = new FileStream(fileName, FileMode.CreateNew))
{
using (StreamWriter writer = new StreamWriter(fileStream))
{
writer.Write(xml);
}
}
}
这是因为BinaryWriter
在前面添加了写入字符串的长度(如int)
public static void CreateFile(string xml)
{
var dateStamp = DateTime.Now.ToString("yyyy-MM-dd");
var fileName = "file_" + dateStamp + ".xml";
if (File.Exists(fileName))
{
Console.WriteLine("File already exists.");
return;
}
using (FileStream fileStream = new FileStream(fileName, FileMode.CreateNew))
{
using (StreamWriter writer = new StreamWriter(fileStream))
{
writer.Write(xml);
}
}
}
如果使用二进制编写器
,则会发生这种情况。如果将其更改为StreamWriter
,则此问题将消失。如果使用BinaryWriter
,则会发生此情况。如果将其更改为StreamWriter
这个问题就会消失。为什么要使用BinaryWriter?这就是本教程中的内容。将其更改为StreamWriter修复了它。谢谢把它放在下面的答案里,我来核对一下。你为什么要使用二进制编写器?这就是教程中的内容。将其更改为StreamWriter修复了它。谢谢把答案写在这里,我来核对一下。