2017-09-08 185 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