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

Comments