Как установить кодировку windows 1251 c

I need to create System.Encoding for 1251 codepage. On my russian Windows I use Encoding encoding = Encoding.Default I am afraid this will produce different results depending on Windows

I need to create System.Encoding for 1251 codepage.

On my russian Windows I use

Encoding encoding = Encoding.Default

I am afraid this will produce different results depending on Windows

asked Oct 19, 2010 at 11:11

Captain Comic's user avatar

Captain ComicCaptain Comic

15.4k43 gold badges107 silver badges145 bronze badges

1

Correct, you will get different results on different machines if you use Encoding.Default.

If you want a specific codepage, you can use Encoding.GetEncoding:

Encoding encoding = Encoding.GetEncoding("windows-1251");

kiewic's user avatar

kiewic

15.5k13 gold badges75 silver badges98 bronze badges

answered Oct 19, 2010 at 11:16

Michael Madsen's user avatar

Michael MadsenMichael Madsen

53.8k7 gold badges72 silver badges83 bronze badges

1

For .NET Core you also need to reference the System.Text.Encoding.CodePages package and then use Encoding.RegisterProvider:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

answered Sep 6, 2017 at 13:17

razon's user avatar

The .NET Framework/.NET Core supports a large number of character encodings and code pages. To retrieve an encoding that is present in the .NET Framework/.NET Core pass the EncodingProvider object to the Encoding.RegisterProvider method to make the encodings supplied by the EncodingProvider object available to the common language runtime. Microsoft Document Reference

System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

answered Apr 8, 2020 at 5:53

Charan Ghate's user avatar

Charan GhateCharan Ghate

1,36414 silver badges32 bronze badges

  • Remove From My Forums
  • Вопрос

  • Здравствуйте, хочу поменять кодировку с Utf-8 на windows1251

    string str = "Привет";
                Encoding utf8 = Encoding.GetEncoding("Utf-8");
                Encoding windows1251 = Encoding.GetEncoding("Windows-1251");
    
                byte[] utf8Byte = utf8.GetBytes(str);
                byte[] windows125Byte = Encoding.Convert(utf8, windows1251, utf8Byte);
                str = windows1251.GetString(windows125Byte);
    
                //Sms.SendSms("89138052076", str);
                Console.WriteLine(str);

    Но оно почему то не преобразовывается….
    По умолчанию кодировка строк в Windows — utf-8?
    Или я что то не то делаю??

Ответы

    • Помечено в качестве ответа

      25 марта 2012 г. 9:07

Iiisi

0 / 0 / 0

Регистрация: 06.04.2014

Сообщений: 12

1

14.05.2014, 14:27. Показов 44547. Ответов 4

Метки нет (Все метки)


Доброго времени суток!
Проблема в том что кодировка изменяется на UTF-8,но требуется на Windows-1251.
Что не так?
Заранее спасибо.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void button2_Click(object sender, EventArgs e)
        {
            Encoding Code = Encoding.GetEncoding(1251);
            string Str = string.Empty;
            using (System.IO.StreamReader Reader = System.IO.File.OpenText(Form1.filename))
            {
                Str = Reader.ReadToEnd();
            }
            Str = Str.Replace("111", "123");
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(Form1.filename))
            {
                file.Write(Str,Code);//Тут мы меняем кодировку,в чем ошибка?
            }
            MessageBox.Show("Работа выполнена успешно!");
            this.Close();
        }

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



991 / 889 / 354

Регистрация: 24.03.2014

Сообщений: 2,381

Записей в блоге: 2

14.05.2014, 14:30

2

А где Вы видите, что она «подменилась» на UTF8?



0



0 / 0 / 0

Регистрация: 06.04.2014

Сообщений: 12

14.05.2014, 14:31

 [ТС]

3

Spawn, Проверял кодировку файла после работы программы



0



Spawn

991 / 889 / 354

Регистрация: 24.03.2014

Сообщений: 2,381

Записей в блоге: 2

14.05.2014, 14:38

4

C#
1
2
3
4
            File.WriteAllText("c:\utf8.txt", "123", Encoding.UTF8);
            File.WriteAllText("c:\win1251.txt", "123", Encoding.GetEncoding(1251));
            long utf8Size = new FileInfo("c:\utf8.txt").Length;        //6
            long win1251Size = new FileInfo("c:\win1251.txt").Length;  //3

Я чего-то не так сделал?



0



OwenGlendower

Администратор

Эксперт .NET

15243 / 12282 / 4904

Регистрация: 17.03.2014

Сообщений: 24,882

Записей в блоге: 1

14.05.2014, 14:50

5

Лучший ответ Сообщение было отмечено Iiisi как решение

Решение

Iiisi, кодировку следует передавать конструкторам StreamReader и StreamWriter. Вызов file.Write(Str,Code) не менял кодировку. Ты вызывал вот эту перегрузку Write предназначенную для форматированного вывода.

Правильно будет так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void button2_Click(object sender, EventArgs e)
{
    Encoding win1251 = Encoding.GetEncoding(1251);
    
    string str;
    using (var reader = new StreamReader(Form1.filename, win1251))
    {
        str = reader.ReadToEnd();
    }
    
    str = str.Replace("111", "123");
    
    using (var writer = new StreamWriter(Form1.filename, false, win1251))
    {
        writer.Write(str);
    }
    
    MessageBox.Show("Работа выполнена успешно!");
    this.Close();
}

Или так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void button2_Click(object sender, EventArgs e)
{
    Encoding win1251 = Encoding.GetEncoding(1251);
    
    string str = File.ReadAllText(Form1.filename, win1251);
    
    str = Str.Replace("111", "123");
    
    File.WriteAllText(Form1.filename, str, win1251);
    
    MessageBox.Show("Работа выполнена успешно!");
    this.Close();
}



0



Библиотека на языке C для конвертации строк из кодировки UTF-8 в CP1251

Адрес проекта: https://github.com/bravikov/utf8_to_cp1251

  • Поставляется в виде исходного кода.
  • Написана на языке С89.
  • Может быть использована в программах на языке C++.
  • Может применяться в программах для микроконтроллеров.
  • В библиотеке учтено, что символы Юникод кодируются в UTF-8 разным колличеством
    байт (от 1 до 6 включительно).
  • Подмена символов.

Применение

Вам понадобятся 3 файла:

  • bit.h
  • utf8_to_cp1251.h
  • utf8_to_cp1251.c

Включите utf8_to_cp1251.h в файле, где хотите применить билиотеку. Добавте
utf8_to_cp1251.c в сборку своего проекта. Для конвертации используйте функцию

int convertUtf8ToCp1251(const char * utf8, char * cp1251)

Описание функции смотрие в файле utf8_to_cp1251.h.

Файл test.c не нужно добавлять в сборку, он используется только для тестирования
библиотеки.

Подмена символов

Библиотека позволяет пользователю назначить собственную таблицу перекодировки.
Пользовательская перекодировка может применяться к символам CP1251 из диапазона
от 0x80 до 0xBF включительно. Таблица должна быть отсортирована по возрастанию
кодов Юникод. Помните, что код 0x98 CP1251 никак не задействован, и его можно
переназначить в первую очередь.

Пример:

static const Cp1251 cp1251Table[] = {
    {0x98, 0x03C6}, /* φ, GREEK SMALL LETTER PHI */
    {0x80, 0x2211}, /* ∑, N-ARY SUMMATION */
    {0x81, 0x25BA}, /* ►, BLACK RIGHT-POINTING POINTER */
};
setCustomCp1251Table(cp1251Table, sizeof(cp1251Table) / sizeof(Cp1251));

Ограничение: в строке UTF-8 нельзя использовать символы, которые были замещены.
Так как замещенные и замещающие символы будут кодироваться в CP1251 одним кодом.
Это ограничение не преодолено по двум причинам:

  1. Экономия вычислительных ресурсов.
  2. Если символы замещаются, то они не нужны.

Тестирование

Библиотека подвергается двум тестам: с линеным (последовательным) и двоичным
поисками. Тестрирование обязательно при внесении изменений в библиотеку и
необязательно при обычном использовании. Для тестирования библиотеки нужно
выполнить следующии команды.

gcc —std=c89 -D UTF8_TO_CP1251_LINEAR_SEARCH -o test1 test.c utf8_to_cp1251.c; ./test1

gcc —std=c89 -o test2 test.c utf8_to_cp1251.c; ./test2

Авторы

  • Дмитрий Бравиков (dmitry@bravikov.pro).

Like this post? Please share to your friends:
  • Как установить компас 3d v16 на windows 7 бесплатно через торрент
  • Как установить календарь на рабочий стол windows 10 на ноутбуке
  • Как установить кодировку utf 8 в windows
  • Как установить компас 3d v16 на windows 10 выдает ошибку
  • Как установить календарь на рабочем столе компьютера windows 10