2

我对 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();
    }
}

当我阅读我的文件时,我得到如下信息:

在此处输入图像描述

������</p>

我尝试改变文化,编码,什么都没有。

这门课有什么问题?

我非常感谢任何帮助或指导。谢谢!

4

1 回答 1

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 编码保存文件会容易得多,那么您可以立即阅读它。

在此处输入图像描述

于 2017-01-23T07:23:40.830 回答