C# StreamReader.CurrentEncoding在运行巧克力或八达通时会有所不同
我有一个azure虚拟机,上面有很多文件。其中一些文件非常混乱,例如,包含UTF8 BOM和非UTF8字符,特别是智能引号,如下所示:C# StreamReader.CurrentEncoding在运行巧克力或八达通时会有所不同,c#,powershell,azure,octopus-deploy,chocolatey,C#,Powershell,Azure,Octopus Deploy,Chocolatey,我有一个azure虚拟机,上面有很多文件。其中一些文件非常混乱,例如,包含UTF8 BOM和非UTF8字符,特别是智能引号,如下所示: <option ef="“Late”" /> 调用.ReadToEnd(),然后检查CurrentEncoding。如果我在powershell窗口中运行此进程,它会像预期的那样返回System.Text.asciencecoding,这是因为它使用了智能引号,并且在其他任何地方运行时都会这样做。如果我在巧克力包装内或通过octopus deplo
<option ef="“Late”" />
调用.ReadToEnd()
,然后检查CurrentEncoding
。如果我在powershell窗口中运行此进程,它会像预期的那样返回System.Text.asciencecoding
,这是因为它使用了智能引号,并且在其他任何地方运行时都会这样做。如果我在巧克力包装内或通过octopus deploy运行它,CurrentEncoding
等于System.Text.UTF8Encoding
我之所以调用
.ReadToEnd()
,是因为执行读取操作将正确设置编码。巧克力和八达通有什么不同,它们正在制作StreamReader
猜错编码?你说“准确”是什么意思?编码方式是可变的。是什么让你认为它不准确?如果Chocolate将编码更改为UTF8,则您的进程将作为UTF8启动。@Tigran我知道这些文件都是ASCII码,因为除了通过我的新Chocolate软件包之外,在任何地方都会运行这些文件,它将它们检测为ASCII码,并将其转换为UTF8。@Gusman请查看我上面的评论和我的后期更新。只要文件没有BOM表,没有隐式编码,原始数据就可以以不同的方式进行解释。
StreamReader sr = new StreamReader(filename, Encoding.ASCII, true);