2017-09-08 183 views
0

此代码按预期在.net framework但不是在.net core 2与.NET核心2

文件in.txt包含“杜塞尔多夫”编码问题在.NET框架

  • 输出为“杜塞尔多夫“

  • 在.NET芯

    的输出为 ”杜塞尔多夫“

(我已经尝试了所有其他编码的绝望已经......没有一个作品)

string infile = @"C:\in.txt", outFile = @"C:\out.txt"; 

var inStr = new StreamReader(infile, Encoding.Default); 
var outStr = new StreamWriter(outFile, false, Encoding.Default); 

while (!inStr.EndOfStream) 
{ 
    outStr.WriteLine(inStr.ReadLine()); 
} 

outStr.Flush(); 
inStr.Dispose(); 
outStr.Dispose(); 

为什么它不工作的任何想法?

+0

请附上文件这个问题(如果可能截断)。 .NET Core通常默认为UTF-8,但.NET Core 2.0默认启用了代码页支持,这可能会导致以前版本中出现类似问题。 –

回答

3

根据官方MSDN page默认编码是不固定的 - 这取决于操作系统设置。如果您知道该文件具有哪种编码,请指定它!

编辑: 然后尝试打印.net框架中的编码细节(如名称)工作。然后在.net core 2中指定相同的值。不要依赖默认值。此页面MSDN, List of encodings in the code sample包含受支持的编码列表。

更新通过gsharp: 我不得不引用NuGet包System.Text.Encoding.CodePages,注册它们,并使用它

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 

var enc1252 = Encoding.GetEncoding(1252); 

var inStr = new StreamReader(infile, enc1252); 
var outStr = new StreamWriter(outFile, false, enc1252); 
+0

@gsharp编辑我的帖子 – Michael

+0

您指出我正确的方向。将编辑您的答案与我的调查结果。 – gsharp