Смена кодировки строки в C#

C#   10 Январь 2013  Автор статьи:  

Очень часто возникает проблема с кодировками строк. Она может возникнуть, когда вы читаете из командной строки или из html — файла или откуда — нибудь еще. Существует два возможных варианта:

  • Перед вами файл в котором нужная строка находится в «плохой кодировке»
  • Перед вами уже строка, которая содержит некоторое отображение «плохой кодировки»

Если перед нами файл, то все просто, достаточно использовать StreamReader c нужной кодировкой или если перед нами текстовый файл, то можно воспользоваться методом ReadAllText:

1
string ans = File.ReadAllText(path + @"\1.txt", Encoding.GetEncoding(866));

Таким образом в переменную ans запишется текст в нужной кодировке. Следует понимать, что по .NET хранит строки в UTF8, и в примере приведенном выше произошло преобразования из кодировки DOS в UTF8.
Теперь допустим, что вы считали текст из файла без указания кодировки или еще каким — то образом получили не читаемую строку. Тогда вам следует преобразовать вашу UTF8 не читаемую строку в нужную вам кодировку. Еще раз рассмотрим нашу ситуацию на конкретном примере. Пусть у нас есть файл, в котором написано «Привет» в «плохой» кодировке. Читая из него без указания данной кодировки мы получаем белиберду: «??????йчывавыа». Ну или каким — то другим образом у нас оказывается в переменной string ans не читаемая строка, тогда вы можете выполнить следующие преобразования:

1
2
3
4
var fromEncodind = Encoding.UTF8;//из какой кодировки
var bytes = fromEncodind.GetBytes(ans);
var toEncoding = Encoding.GetEncoding(866);//в какую кодировку
ans = toEncoding.GetString(bytes);

Научиться программировать

  • на Delphi

  • на Java

  • на C++