FileOpenPicker - Как читать специальные символы
У меня проблема с FileOpenPicker. Я использую специальные символы, например, ś ć ę, и мой файл.txt содержит содержимое: "śś ćć ę ó"
Это мой код:
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();
}
}
И когда я читаю мой файл, я получаю что-то вроде этого:
Я пытался изменить культуру, кодирование и ничего.
Как проблема с этим классом?
Я действительно ценю любую помощь или руководство по этому вопросу. Спасибо!
1 ответ
Проблема не в классе, а в кодировке 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, тогда вы могли бы прочитать его прямо сейчас.