Внутренняя кодировка .NET - PullRequest
6 голосов
/ 11 ноября 2010

Что такое внутренняя кодировка из приложений .NET? (Например, строковые объекты) Могу ли я определить, какую кодировку должно использовать мое приложение?Если я напишу строку .net в файл.В какой кодировке есть строка?

// edit

Dim test as String="Das ist ein Test" <---what Encoding has this String?

Dim reader as New IO.StreamReader(docPath, _
    System.Text.Encoding.GetEncoding("shift-jis"))

test=reader.ReadToEnd() <---and now? What Encoding has this String?

Спасибо!

Ответы [ 4 ]

5 голосов
/ 11 ноября 2010
Dim test as String="Das ist ein Test" <---what Encoding has this String?

UTF-16

Dim reader as New IO.StreamReader(docPath,
    System.Text.Encoding.GetEncoding("shift-jis"))
test=reader.ReadToEnd <---and now? What Encoding has this String?

Still UTF-16. Класс StreamReader просматривает байты в docPath и преобразует их в UTF-16 на основе кодировки shift-jis.

3 голосов
/ 11 ноября 2010

System.String - это UTF-16. Вы можете преобразовать это в различные другие кодировки, используя производные класса System.Text.Encoding.

В ответ на редактирование: System.IO.StreamReader, насколько мне известно, пытается "угадать" правильную кодировку, если она не указана. System.IO.StreamWriter пишет как UTF-8, IIRC. Я менее знаком с этими классами, поэтому воспринимаю эту информацию на свой страх и риск;)

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

Как и все остальные ответы: да, 2-байтовый Unicode (UTF-16). И да, вы можете контролировать способ записи на диск, как описано в @Billy ONeal.

Относительно вашего вопроса, возможно ли контролировать это: Нет, это невозможно. .NET всегда будет работать внутри Unicode UTF-16. Для этого нет настроек.

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

Внутренне .NET использует Юникод - ОБНОВЛЕНО - UTF-16.

Однако, если вы записываете строку в файл, вы должны указать кодировку. Если вы этого не сделаете, .NET выберет для вас кодировку - обычно это UTF8 . Вот отраженный File.WriteAllText:

public static void WriteAllText(string path, string contents)
{
    if (path == null)
    {
        throw new ArgumentNullException("path");
    }
    if (path.Length == 0)
    {
        throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
    }
    InternalWriteAllText(path, contents, StreamWriter.UTF8NoBOM);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...