Есть десятичный код символа 'в'== 53426
https://i.voenmeh.ru/kafi5/Kam.loc/inform/UTF-8.htm
Сохраняю этот код в int и пытаюсь отобразить через wprintf.
Символ не отображается.
int main()
{
setlocale(LC_ALL, "Russian");
setlocale(LC_CTYPE,"C-UTF-8");
int a=53426;
wprintf(L"%lc\n",a);
}
Использовал эту инструкцию
https://russianblogs.com/article/6445673680/
Не помогает.
C/C++
Отображение символов UTF8 в консоли Windows. (Си)
Ну так внутри юникод в винде хранится не в кодировке UTF-8. Попробуй int a = 0x432.
setlocale влияет только на кодировку при вводе и выводе, но не при обработке.
И кодировка правильно пишется через точку:
setlocale(LC_CTYPE,"C.UTF-8");
setlocale влияет только на кодировку при вводе и выводе, но не при обработке.
И кодировка правильно пишется через точку:
setlocale(LC_CTYPE,"C.UTF-8");
А wchar_t использовать не судьба?
Как ни крути, а хорошо работает до сих пор тип широких символов. Остальные варианты для вечно отсталой Винды не катят.
#include<wchar.h>
#include<locale.h>
setlocale(LC_ALL, "Russian");
wchar_t let=L'в';
wprintf(L"%lc",let);
...
...
Просто научись этим пользоваться.
Как ни крути, а хорошо работает до сих пор тип широких символов. Остальные варианты для вечно отсталой Винды не катят.
#include<wchar.h>
#include<locale.h>
setlocale(LC_ALL, "Russian");
wchar_t let=L'в';
wprintf(L"%lc",let);
...
...
Просто научись этим пользоваться.
Александр Круглов
Проверьте код символа wprintf(L"%d",let);
Это юникод https://i.voenmeh.ru/kafi5/Kam.loc/inform/UTF-8.htm
1074
Это юникод https://i.voenmeh.ru/kafi5/Kam.loc/inform/UTF-8.htm
1074
Александр Круглов
Или это UTF32, а не Юникод?
Александр Круглов
Этим я научился пользоваться, хотелось UTF8 попробовать
Александр Круглов
Коды символов utf32 соответствуют кодам символов Юникода.
https://onlineunicodetools.com/convert-unicode-to-utf32 00000031000000300000003700000034
https://onlineunicodetools.com/convert-unicode-to-utf32 00000031000000300000003700000034
А как это ты использовал эту инструкцию?
У тебя ж команда chcp ни фига не дергается из кода. Ты в другом процессе поправил кодовую страницу, что ли, и теперь ожидаешь, что оно на всю юзер сессию подействует?
Ну, хз, мб Windows именно так и работает, но это было б как-то через жопу - нелогично, имхо.
Да и не очень понятно, зачем в UTF-8 нужны wchar-ы. Строка UTF8 оканчивается нулевым байтом, на символ уходит о 1 до 6 байт, на ASCII символ - в точности 1 байт и его бинарное представление совпадает со всеми однобайтными кодовыми страницами.
Как он должен с wchar-ами работать, фиг его знает.
Я б обычные char-ы использовал для UTF-8, просто надо помнить, что не ASCII-сивмол занимает больше байта. А код первого байта в символе в UTF-8 строке легко определить по попаданию в определенный числовой промежуток...
У тебя ж команда chcp ни фига не дергается из кода. Ты в другом процессе поправил кодовую страницу, что ли, и теперь ожидаешь, что оно на всю юзер сессию подействует?
Ну, хз, мб Windows именно так и работает, но это было б как-то через жопу - нелогично, имхо.
Да и не очень понятно, зачем в UTF-8 нужны wchar-ы. Строка UTF8 оканчивается нулевым байтом, на символ уходит о 1 до 6 байт, на ASCII символ - в точности 1 байт и его бинарное представление совпадает со всеми однобайтными кодовыми страницами.
Как он должен с wchar-ами работать, фиг его знает.
Я б обычные char-ы использовал для UTF-8, просто надо помнить, что не ASCII-сивмол занимает больше байта. А код первого байта в символе в UTF-8 строке легко определить по попаданию в определенный числовой промежуток...
Похожие вопросы
- Как узнать количество символов в UTF8 массиве?(Си)
- Создание таблицы в консоли вывода программы. С++
- Актуальность Си и Си++
- Изучение Си/Си++ дорожная карта?
- Ввести с клавиатуры символ и преобразовать его в символ верхнего регистра. Как сделать без библиотеки string?
- [c++] Почему при возврате строки по ссылке(const), она не выводится в консоль? Подробности внизу.
- Возможно ли создание ЯП производительнее Си?
- Си!!! БЕЗ УКАЗАТЕЛЕЙ, ЯЗЫК СИ
- Решить задачу на языке СИ
- Программа на СИ. Циклы с постусловием и предусловием
В винде не получится? Почему?
setlocale(LC_ALL, "Russian");
unsigned int a=1074;
wprintf(L"%lc\n",a);
То выводится буква 'в' в консоле
Это значит что setlocale(LC_ALL, "Russian"); распознаёт utf16 код и конвертирует в русские символы.
Что мне кажется странным
Это ведь setlocale(LC_ALL, "Russian"); меняет кодирование на 1251 а не на utf16
--------------------
А это setlocale(LC_ALL,".UTF-8"); должно по идее распознавать код int a=53426; и тоже трансформировать в русские символы, не?
setlocale(LC_ALL,".UTF-8");
unsigned int a=53426;
wprintf(L"%lc\n",a);
char*p=setlocale(LC_ALL, ".UTF8");
printf("%s\n",p);
Может даже кодировка не меняется на UTF8.
wchar_t не использую.
Это setlocale(LC_ALL, "Russian"); меняет ведь кодировку на 1251, почему в utf16 конвертирует кириллицу?
int a=getwchar();
wprintf(L"%d\n", a);
Нет, не конвертирует.