Чтение файлов txt (в unicode и utf8) с помощью С#
Я создал два файла txt (windows notepad) с тем же содержимым "спасибо - спасибо" и сохранил их в utf8 и unicode. В блокноте они выглядят отлично. Затем я попытался их прочитать, используя .Net:
...File.ReadAllText(utf8FileFullName, Encoding.UTF8);
и
...File.ReadAllText(unicodeFileFullName, Encoding.Unicode);
Но в обоих случаях я получил это "спасибо -???????". Что не так?
Upd:
код для utf8
static void Main(string[] args)
{
var encoding = Encoding.UTF8;
var file = new FileInfo(@"D:\encodes\enc.txt");
Console.OutputEncoding = encoding;
var content = File.ReadAllText(file.FullName, encoding);
Console.WriteLine("encoding: " + encoding);
Console.WriteLine("content: " + content);
Console.ReadLine();
}
Результат:
спасибо ÑÐÀÐ ° ÑиР± о
Ответы
Ответ 1
Отредактировано как UTF8
должно поддерживать символы. Кажется, что вы выводите на консоль или место, у которого не было его набора кодировок. Если это так, вам нужно установить кодировку. Для консоли вы можете это сделать
string allText = File.ReadAllText(unicodeFileFullName, Encoding.UTF8);
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine(allText);
Ответ 2
При выводе кодированных многобайтовых символов Unicode или UTF-8 вам нужно будет установить кодировку, а также убедиться, что консоль имеет набор шрифтов, который поддерживает многобайтовый символ, чтобы отобразить соответствующий символ, С вашим существующим кодом появится MessageBox.Show(контент) или отображение в Windows или веб-форме.
Посмотрите http://msdn.microsoft.com/en-us/library/system.console.aspx для объяснения установки шрифтов в окне консоли.
"Поддержка символов Юникода требует, чтобы кодер распознавал конкретный символ Юникода, а также требует шрифт, который имеет глифы, необходимые для визуализации этого символа. Чтобы успешно отображать символы Юникода в консоли, шрифт консоли должен быть установлен на шрифт без растра или TrueType, такой как Consolas или Lucida Console."
В качестве дополнительной заметки вы можете использовать класс FileStream для чтения первых трех байтов файла и поискать индикатор метки байтового байта, чтобы автоматически устанавливать кодировку при чтении файла. Например, если byte [0] == 0xEF && байт [1] == 0xBB && byte [2] == 0xBF, тогда у вас есть кодированный файл UTF-8. Для получения дополнительной информации см. http://en.wikipedia.org/wiki/Byte_order_mark.
Ответ 3
Использовать тип кодировки По умолчанию
File.ReadAllText(unicodeFileFullName, Encoding.Default);
Он исправит ????
Chracters.