Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как узнать стандартную кодировку IDE?(Си) Windows 1251, UTF-8, ASCII

kh fjkg Знаток (328), на голосовании 3 года назад
Windows 1251, UTF-8, ASCII

Вот например в Code Blocks эту кодировку видно в нижней части окна.
Может командой в коде можно как то это узнать?
Голосование за лучший ответ
Дед Мазай Гений (58129) 3 года назад
Это зависит от IDE. Про Code::Blocks ты сам ответил. Можно сохранить файл (обязательно с русскими буквами), а потом в Notepad++ посмотреть, в какой он кодировке.
В самом коде в принципе можно определить кодировку, только это уже будет другая кодировка: кодировка компилятора. Она может отличаться от исходного файла с исходным кодом.
kh fjkgЗнаток (328) 3 года назад
Как узнать кодировку в самом коде?
Дед Мазай Гений (58129) kh fjkg, это программист сам придумывает. Стандартной функции нет. Я придумал такой способ. Берём строку с русской буквой, например "я". Определяем её длину. Если 2, значит кодировка UTF-8. Если 1, смотрим код символа и сравниваем с кодом буквы "я" в разных кодировках. Можно и не сравнивать, поскольку актуальная однобайтовая кодировка для русского языка только одна.
kh fjkgЗнаток (328) 3 года назад
>> Если 2, значит кодировка UTF-8
Если 2 Байта, то не обязательно UTF8, может быть и Unicode.
Проверьте в Visual Studio:

wchar_t a = L'Ж'; //Юникод код 0416
char *arr = u8"Ж"; //UTF8 код D096
Дед Мазай Гений (58129) kh fjkg, это ты чушь написал. UTF-8 -- это разновидность Unicode. Вопрос о кодировках подразумевает кодировку строк char, а в твоём примере сначала wchar_t, а потом явно указана UTF-8. Тип wchar_t может быть разного размера.
kh fjkgЗнаток (328) 3 года назад
Не понимаю с чем вы не согласны.
kh fjkgЗнаток (328) 3 года назад
Это wchar_t a = L'Ж'; будет в HEX коде как 0416, а это Юникод
kh fjkgЗнаток (328) 3 года назад
>>Тип wchar_t может быть разного размера.
Тип wchar_t до двух Байт. Но главное HEX 0416 это 2 Байта
Дед Мазай Гений (58129) kh fjkg, https://ru.wikipedia.org/wiki/Широкий_символ В GNU/Linux тип wchar_t имеет размер 32 бита.
kh fjkgЗнаток (328) 3 года назад
Класно. Вот бы везде так было.
К сожалению в винде только 16 бит.
Дед Мазай Гений (58129) kh fjkg, сам Windows работает в кодировке UTF-16, поэтому удобно такие символы использовать всегда. Думаю, в C++ можно работать со строками в UTF-32 независимо от ОС. Но при вызове функций ОС надо будет делать перекодировку.
kh fjkgЗнаток (328) 3 года назад
Дед Мазай Гений (58129) kh fjkg, зачем мне эти ссылки?
kh fjkgЗнаток (328) 3 года назад
Убедиться что 0416 Это Юникод а не UTF8
А это wchar_t a = L'Ж'; хранится именно как 0416 в HEX.
Это Юникод и 2 Байта.
Дед Мазай Гений (58129) kh fjkg, программист и так знает, что написано в его программе: char или wchar_t. Это не зависит ни от компилятора, ни от IDE. Хотя по стандарту wchar_t может быть 1 байт, фактически есть только два варианта: 2 или 4 байта. Для wchar_t нет разных кодировок. Поэтому вопрос о кодировках относится только к символам char.
Похожие вопросы