【问题标题】:FileOpenPicker - How to read special charactersFileOpenPicker - 如何读取特殊字符
【发布时间】:2017-01-22 23:19:07
【问题描述】:

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

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

�� �� �

我尝试改变文化、编码,但什么也没有。

这门课有什么问题?

非常感谢您对此提供的任何帮助或指导。谢谢!

【问题讨论】:

  • 你的文件可能有问题,首先你的文本文件是什么编码的?然后使用您未明确指定的相同编码打开 StreamReader。 (我推荐使用UTF8编码)

标签: c# uwp fileopenpicker


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多