Какую кодировку строки получают из StreamReader.ReadLine () - PullRequest
7 голосов
/ 11 ноября 2011

Сначала давайте посмотрим код:

//The encoding of utf8.txt is UTF-8
StreamReader reader = new StreamReader(@"C:\\utf8.txt", Encoding.UTF8, true);
while (reader.Peek() > 0)
{
    //What is the encoding of lineFromTxtFile?
    string lineFromTxtFile = reader.ReadLine();
}

Как сказал Джоэл в своей знаменитой статье :

Если у вас есть строка, в памяти, в файле или в сообщении электронной почты, вы должны знать, в какой она кодировке, или вы не можете ее интерпретировать или правильно отображать для пользователей. "

Итак, возникает мой вопрос: какова кодировка строки lineFromTxtFile ? UTF-8 (потому что это из текстового файла, закодированного в UTF-8)? или UTF-16 (потому что строка в .NET - это «Unicode» (UTF-16))?

Спасибо.

Ответы [ 3 ]

6 голосов
/ 11 ноября 2011

Все строковые переменные .Net кодируются с помощью Encoding.Unicode ( UTF-16, little-endian ).Еще лучше, потому что вы знаете, что ваш текстовый файл - utf-8, и сказали вашему потоковому считывателю правильную кодировку в конструкторе, любые специальные символы будут обрабатываться правильно.

2 голосов
/ 11 ноября 2011

.NET строки являются Unicode. Кодирование не играет роли, тогда, пока вам не понадобится использовать его дальше. Если вы, например, собираетесь записать его в файл, вы укажете выходную кодировку. Но поскольку .NET обрабатывает все, что вы делаете со строкой, через библиотечные вызовы, не имеет значения, как она представлена ​​в памяти.

1 голос
/ 11 ноября 2011

Это будет Unicode, потому что все строки .NET.Реальный вопрос: почему это важно?

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