2017-01-22 12 views
2

FileOpenPickerに問題があります。私は特殊文字を使用します。 SćEとコンテンツを持っている.TXT私のファイル: 「SS CCいるÊO」FileOpenPicker - 特殊文字を読み取る方法

それは私のコードです:

var picker = new Windows.Storage.Pickers.FileOpenPicker(); 
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List; 
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop; 
picker.FileTypeFilter.Add(".txt"); 

Windows.Storage.StorageFile file = await picker.PickSingleFileAsync(); 
if (file != null) 
{ 
    using (var inputStream = await file.OpenReadAsync()) 
    using (var classicStream = inputStream.AsStreamForRead()) 
    using (var streamReader = new StreamReader(classicStream)) 
    { 
     var something = streamReader.ReadToEnd(); 
    } 
} 

そして、私は私のファイルを読んだとき、私はこのような何かを得る:

enter image description here

私は、変更文化、エンコードと何を試してみました。

このクラスにはどのような問題がありますか?

本当にありがとうございました。ありがとう!

+0

問題がファイルにある可能性があります。まず、テキストファイルはどのようなエンコードですか?その後、明示的に指定しなかったエンコーディングでStreamReaderを開きます。 (私はUTF8エンコーディングを使用することをお勧めします) – kurakura88

答えて

0

問題はクラスではなく、txtファイルのエンコーディングです。おそらく、コードをANSIに設定していると思われます。コードでコードを読み取ろうとすると、変な文字が表示されます。それを正しく行うには、あなたが登録し、プロバイダと一緒に特定のエンコーディングを定義する必要があります:

var picker = new Windows.Storage.Pickers.FileOpenPicker(); 
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List; 
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop; 
picker.FileTypeFilter.Add(".txt"); 
Windows.Storage.StorageFile file = await picker.PickSingleFileAsync(); 
if (file != null) 
{ 
    // register provider - by default encoding is not supported 
    Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); 
    using (var inputStream = await file.OpenReadAsync()) 
    using (var classicStream = inputStream.AsStreamForRead()) 
    using (var streamReader = new StreamReader(classicStream, Encoding.GetEncoding(1250))) 
    { 
     var something = streamReader.ReadToEnd(); 
    } 
} 

あなたはUTF-8エンコーディングを使ってファイルを保存していた場合、それは次のようになりはるかに簡単に、あなたはちょうどそれをすぐに読むかもしれません。

enter image description here

関連する問題