繁体   English   中英

C#StreamReader / StreamWriter编码异常

[英]C# StreamReader/StreamWriter encoding oddity

我有一个非常简单的c#控制台应用程序,该应用程序通过StreamReader和StreamWriter读取文本文件并输出相同的文件,但在出现的每一行中都替换了特定的字符串。 我不知道源文件的编码。 我遇到一种情况,文件中有一个字符(ext ascii dec 166,折断的管道),通过该应用程序运行时,它会使用默认编码“被缠住”(在输出文件中,它最终以“ box”字符出现) )。 由于我不知道源文件的编码方式,因此我尝试了多种选择来查看什么将提供不变的结果,并且奇怪的是,唯一可行的方法是使用UTF-7读取并使用UTF-8编写。

从UTF-7到UTF-7会导致类似&的问题变为+ AC。 UTF-8到UTF-8(我相信这是默认值)会将有问题的字符转换为“框”。 ASCII到ASCII会将其转换为?。 Unicode到Unicode导致乱码。 读和写的编码是否相同,结果是否相同? 下面是简化的代码示例:

using (var fileStream = new FileStream(fileName, FileMode.Open))
using (var fileReader = new StreamReader(fileStream,Encoding.UTF7))
using (var fileStreamOut = new FileStream(tempFileName,FileMode.Create))
using (var fileWriter = new StreamWriter(fileStreamOut,Encoding.UTF8))
{                
    while (!fileReader.EndOfStream)
    {
        var inputLine = fileReader.ReadLine();

        if (inputLine != null)
        {
            inputLine = inputLine.Substring(0, 3) + newRdfi + inputLine.Substring(12);
            fileWriter.WriteLine(inputLine);
        }
    }

    fileWriter.Flush();
}

在澄清了源系统开发人员提供的文件创建方法以及服务器所生成的服务器知识之后,我得出的结论是编码为Windows-1252。 更改我的读写流以使用Encoding.GetEncoding(1252)导致所有字符按预期方式读取和输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM