你需要得到正确的Encoding
对象。ASCII 顾名思义:ASCII,意思是它只支持 7 位 ASCII 字符。如果您要做的是转换文件,那么这可能比直接处理字节数组更容易。
using (System.IO.StreamReader reader = new System.IO.StreamReader(fileName,
Encoding.GetEncoding("iso-8859-1")))
{
using (System.IO.StreamWriter writer = new System.IO.StreamWriter(
outFileName, Encoding.UTF8))
{
writer.Write(reader.ReadToEnd());
}
}
但是,如果您想自己拥有字节数组,使用Encoding.Convert
.
byte[] converted = Encoding.Convert(Encoding.GetEncoding("iso-8859-1"),
Encoding.UTF8, data);
然而,重要的是要注意,如果你想走这条路,那么你不应该使用基于编码的字符串阅读器,比如StreamReader
你的文件 IO。FileStream
会更适合,因为它将读取文件的实际字节。
为了充分探索这个问题,这样的事情会起作用:
using (System.IO.FileStream input = new System.IO.FileStream(fileName,
System.IO.FileMode.Open,
System.IO.FileAccess.Read))
{
byte[] buffer = new byte[input.Length];
int readLength = 0;
while (readLength < buffer.Length)
readLength += input.Read(buffer, readLength, buffer.Length - readLength);
byte[] converted = Encoding.Convert(Encoding.GetEncoding("iso-8859-1"),
Encoding.UTF8, buffer);
using (System.IO.FileStream output = new System.IO.FileStream(outFileName,
System.IO.FileMode.Create,
System.IO.FileAccess.Write))
{
output.Write(converted, 0, converted.Length);
}
}
在此示例中,buffer
变量被文件中的实际数据填充为 a byte[]
,因此不进行任何转换。Encoding.Convert
指定源和目标编码,然后将转换后的字节存储在名为...的变量中converted
。然后将其直接写入输出文件。
就像我说的,第一个选项使用StreamReader
andStreamWriter
会更简单,如果这就是你所做的一切,但后一个例子应该给你更多关于实际发生的事情的提示。