RichTextBox показывает результаты на китайском? - PullRequest
0 голосов
/ 17 апреля 2020

Попытка импортировать файл PlainText с символами Engli sh с использованием RichTextBox в C# с UWP и VS 2017. Импортируется нормально, за исключением того, что все символы являются китайскими. Я должен использовать класс StorageFile для файла, потому что он единственный, который работает с проблемами конфиденциальности файлов UWP. Я попробовал все TexSetOptions безуспешно и не могу найти способ указать формат ни в потоке, ни в rtb. Вот код:

       StorageFile file = await StorageFile.GetFileFromPathAsync(filePath));
       IRandomAccessStream stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);

       /* NOTE: RichTextBox (Name="editor") is defined in Xaml */

       editor.Document.LoadFromStream(Windows.UI.Text.TextSetOptions.ApplyRtfDocumentDefaults, stream);

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

Стандарт UWP RichTextBox - это Unicode с произвольным доступом, поэтому просто нужно настроить поток файлов для соответствия.

        string x = await FileIO.ReadTextAsync(file);
        byte[] bytes = System.Text.Encoding.Unicode.GetBytes(x);
        InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
        await randomAccessStream.WriteAsync(bytes.AsBuffer());
        IRandomAccessStream stream2 = randomAccessStream;  //await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
        editor.Document.LoadFromStream(Windows.UI.Text.TextSetOptions.ApplyRtfDocumentDefaults, stream2);
0 голосов
/ 17 апреля 2020

Как отмечается в комментариях, это связано с несовпадением кодировки. API ожидает UTF-16, но у вас есть UTF-8 (или, возможно, ASCII). Попробуйте вместо этого использовать FileIO.ReadTextAsync. Это должно автоматически определять кодировку, или, если это не так, возникает перегрузка, в которой вы можете указать ее напрямую.

Обратите внимание, что если у вас есть файл, закодированный с помощью кодовой страницы ANSI (не какой-либо разновидности Unicode) вам нужно сначала преобразовать его (проверьте другие SO сообщения).

...