Тип кодировки файла C # изменился? - PullRequest
3 голосов
/ 09 мая 2011

Я создаю файл с кодировкой ASCII, но когда я проверяю, чтобы получить тип кодировки этого файла, он возвращает UTF8Encoding.

Может кто-нибудь объяснить причину или определить мою ошибку ??

КОД:

Создание файла:

 FileStream _textStream = File.Open("CreateAsciiFile.txt", FileMode.Create, FileAccess.Write);
 StreamWriter _streamWriter = new StreamWriter(_textStream, System.Text.Encoding.ASCII);

 Byte[] byteContent = BtyeTowrite();  // This returns the array of byte
 foreach(var myByte in byteContent)
    _streamWriter.Write(System.Convert.ToChar(myByte));

Чтение файла:

StreamReader sr = new StreamReader(@"C:\CreateAsciiFile.txt",true);
string LineText= sr.ReadLine();
System.Text.Encoding enc = sr.CurrentEncoding;

Здесь enc дает UTF8Encoding ... Но я ожидаю ASCII ???

Ответы [ 2 ]

3 голосов
/ 09 мая 2011

Вы должны прочитать из читателя, прежде чем запрашивать кодировку.Поэтому перед звонком sr.CurrentEncoding попробуйте что-нибудь прочитать.StreamReader просматривает первые байты, чтобы попытаться угадать кодировку, и, поскольку ASCII не имеет спецификации, он может не распознаваться как таковой, и вы можете получить неправильные результаты.Например, нет никакой разницы (на двоичном уровне) между файлом в кодировке ASCII и файлом в кодировке ISO-8859-1.

1 голос
/ 09 мая 2011

Ответ, вероятно, здесь : "

Каждый действительный символ ASCII также является действительным символом Unicode в кодировке UTF-8 с тем же двоичным значением.

Другими словами, ваш ASCII-файл является допустимым UTF-8 и ASCII. Он определяется как UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...