Подтвердить что ты не робот

С# Справка по чтению иностранных символов с помощью 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?

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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

Encoding.ASCII

использование

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

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

Изменить: больше решений. Это может быть более точным:

Encoding.GetEncoding(1252);

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

Encoding.Default;

Ответ 4

Использование Encoding.Unicode не будет точно декодировать ANSI файл так же, как JPEG-декодер не поймет GIF файл.

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

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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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

enter image description here

С#

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

Ответ 8

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

Ответ 9

Для шведского языка Å Ö единственное решение от вышеупомянутых рабочих было:

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

Надеюсь, это сэкономит кому-то время.

Ответ 10

Я также читаю экспортированный файл, который содержит французский и немецкий языки. Я использовал Encoding.GetEncoding("iso-8859-1"), правда, который работал без каких-либо проблем.