2017-01-22 8 views
2

У меня проблема с FileOpenPicker. Я использую специальные символы, например. п.к. Е- и мой файл .txt имеет содержание: «Ss куб.см Ео»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

 Смежные вопросы

  • Нет связанных вопросов^_^