C# помощь в чтении иностранных символов с помощью StreamReader



Я использую код ниже, чтобы прочитать текстовый файл, который содержит иностранные символы, файл закодирован ANSI и отлично выглядит в блокноте. Приведенный ниже код не работает, когда значения файла считываются и отображаются в datagrid символы отображаются в виде квадратов, может ли быть другая проблема в другом месте?



StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.ANSI);
using (reader = File.OpenText(inputFilePath))


спасибо



обновление 1: я пробовал все кодировки под System.Text.Encoding. и все не удается показать файл правильно.



обновление 2: я изменил кодировку файла (повторно сохранил файл) в unicode и использовал System.Text.Encoding.Unicode и это сработало просто отлично. Так почему же блокнот прочитал его правильно? А почему бы и нет System.Text.Encoding.Unicode прочитать файл ANSI?

1792   8  

8 ответов:

Да, это может быть с фактической кодировкой файла, вероятно, unicode. Попробуйте UTF-8, поскольку это наиболее распространенная форма кодировки unicode. В противном случае, если файл ASCII, то стандартная кодировка ASCII должна работать.

вы также можете попробовать кодировку по умолчанию, которая использует кодовую страницу ANSI текущей системы.

StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true)

при попытке использовать меню "Сохранить как" в блокноте с исходным файлом, посмотрите на поле со списком кодировка. Он расскажет вам, какая кодировка Блокнот угадал используется файлом.

кроме того, если это файл ANSI, параметр detectEncodingFromByteOrderMarks, вероятно, не очень поможет.

у меня была такая же проблема, и мое решение было простым: вместо

Encoding.ASCII

использовать

Encoding.GetEncoding("iso-8859-1")

ответ был найден здесь.

Edit: дополнительные решения. Это может быть более точным:

Encoding.GetEncoding(1252);

кроме того, в некоторых случаях это будет работать и для вас, если ваша кодировка ОС по умолчанию соответствует кодировке файла:

Encoding.Default;

С Использованием Кодировки.Юникод не точно выиграл декодирования файла в кодировке ANSI таким же образом, что декодеру не поймут файл gif.

Я удивлен, что Encoding.Default не работает для файла ANSI, если это действительно был ANSI-если вы когда-нибудь узнаете точно , который Блокнот кодовой страницы использовал, вы могли бы использовать Encoding.GetEncoding(int).

В общем, где это возможно, я бы рекомендовал использовать UTF-8.

попробуйте другую кодировку, например кодировку.В utf8. Вы также можете попробовать позволить StreamReader найти саму кодировку:

    StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.UTF8, true)

изменить: только что видел ваше обновление. Попробуйте позволить StreamReader делать догадки.

.OpenText () всегда использует UTF-8 StreamReader неявно. Создайте свой собственный StreamReader экземпляр вместо этого и укажите нужную кодировку. как

using (StreamReader reader =  new StreamReader(@"C:\test.txt", Encoding.Default)
 {
 // ...
 }

Я решил свою проблему чтения португальских символов, изменив исходный файл на notepad++.

enter image description here

C#

    var url = System.Web.HttpContext.Current.Server.MapPath(@"~/Content/data.json");
    string s = string.Empty;
    using (System.IO.StreamReader sr = new System.IO.StreamReader(url, System.Text.Encoding.UTF8,true))
    {
          s = sr.ReadToEnd();
    }

для арабского языка, я использовал Encoding.GetEncoding(1256). это работает хорошо.

Comments

    Ничего не найдено.