c# - FileOpenPicker - 如何读取特殊字符

标签 c# uwp 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();
    }
}

当我阅读我的文件时,我得到这样的信息:

enter image description here

�� ��

我尝试过更改文化、编码,但什么都没有。

这个类有什么问题吗?

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

最佳答案

问题不在于类,而在于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

关于c# - FileOpenPicker - 如何读取特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41797273/

相关文章:

linux - 如何打开 .sess 文件?

c# - 使用名称来区分使用 IoC 的实例

c# - 传递列表以在 asp.net mvc 中查看

win-universal-app - 从缺少 UWP 的按钮点击声音 - Windows 10

c++ - Xbox One UWP : "activation request failed"

c# - FileOpenPicker 错误

使用 FileOpenPicker 进行 C# UWP LiveSKD 和 OneDrive 访问

c# - 使用 Mono Compiler/创建一个新的同时仍然输出 Windows EXE?

c# - Form.Move 和 Form.LocationChanged 有什么区别?

c# - UWP 调用 ContentDialog 作为使用依赖注入(inject)的服务