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 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
15.5k13 gold badges75 silver badges98 bronze badges
answered Oct 19, 2010 at 11:16
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
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 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 Метки нет (Все метки)
Доброго времени суток!
__________________
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 |
|||
Я чего-то не так сделал?
0 |
OwenGlendower Администратор 15243 / 12282 / 4904 Регистрация: 17.03.2014 Сообщений: 24,882 Записей в блоге: 1 |
||||||||
14.05.2014, 14:50 |
5 |
|||||||
Сообщение было отмечено Iiisi как решение РешениеIiisi, кодировку следует передавать конструкторам StreamReader и StreamWriter. Вызов file.Write(Str,Code) не менял кодировку. Ты вызывал вот эту перегрузку Write предназначенную для форматированного вывода. Правильно будет так:
Или так:
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 одним кодом.
Это ограничение не преодолено по двум причинам:
- Экономия вычислительных ресурсов.
- Если символы замещаются, то они не нужны.
Тестирование
Библиотека подвергается двум тестам: с линеным (последовательным) и двоичным
поисками. Тестрирование обязательно при внесении изменений в библиотеку и
необязательно при обычном использовании. Для тестирования библиотеки нужно
выполнить следующии команды.
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).