C# Помощь в чтении посторонних символов с помощью StreamReader
Я использую приведенный ниже код для чтения текстового файла, содержащего иностранные символы, файл имеет кодировку ANSI и отлично смотрится в блокноте. Приведенный ниже код не работает, когда значения файлов считываются и отображаются в сетке данных, символы отображаются в виде квадратов, может ли быть другая проблема в другом месте?
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?
Ответов (10)10
Использование Encoding.Unicode не может точно декодировать файл ANSI так же, как декодер JPEG не распознает файл GIF.
Я удивлен, что Encoding.Default
это не сработало для файла ANSI, если это действительно был ANSI - если вы когда-нибудь узнаете, какую именно кодовую страницу использовал Блокнот, вы могли бы использовать Encoding.GetEncoding(int)
.
В общем, по возможности я бы рекомендовал использовать UTF-8.
Я решил свою проблему чтения португальских символов, изменив исходный файл на блокноте ++.
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.ASCII
использовать
Encoding.GetEncoding("iso-8859-1")
Ответ был найден здесь .
Изменить: больше решений. Возможно, это более точный вариант:
Encoding.GetEncoding(1252);
Кроме того, в некоторых случаях это сработает и для вас, если кодировка по умолчанию в вашей ОС совпадает с кодировкой файла:
Encoding.Default;
Вы также можете попробовать кодировку по умолчанию, которая использует кодовую страницу ANSI текущей системы.
StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true)
Когда вы пытаетесь использовать меню Блокнота «Сохранить как» с исходным файлом, посмотрите на поле со списком кодировки. Он сообщит вам, какая кодировка, по предположениям блокнота, используется файлом.
Кроме того, если это файл ANSI, параметр detectEncodingFromByteOrderMarks, вероятно, не поможет.
Попробуйте другую кодировку, например Encoding.UTF8. Вы также можете попробовать позволить StreamReader найти саму кодировку:
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.UTF8, true)
Изменить: только что увидел ваше обновление. Попробуйте позволить StreamReader угадывать.