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, тогда вы могли бы прочитать его прямо сейчас.

введите описание изображения здесь

Другие вопросы по тегам