|
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
|
|
Откуда компилятор знает по какой таблице он должен раскодировать букву?10.11.2021, 08:30. Показов 4496. Ответов 54
Метки нет (Все метки)
ASCII он должен использовать или UTF8? Или UTF16, и.т.п.
Например пишу я это wchar_t a=L'ж'; Как компилятор узнает по какой таблице он должен раскодировать данный символ? --------------------- И ещё вопрос по размеру символов разных кодировок. ANSI и ASCII по 1 Байт? UTF8 и UTF16 от 2 до 4 Байт? --------------------- Почему вопрос возник у меня этот. Code Blocks не понимал кириллицу, но потом как то сам автоматически что то у себя переставил, вылезло оповещение что то связанное с UTF8 и потом всё заработало. Не знаю что за настройки изменились в Code Blocks. Может можно в коде задать напрямую то, в какой системе должны раскодироваться символы?
0
|
|
| 10.11.2021, 08:30 | |
|
Ответы с готовыми решениями:
54
Пример из книги Сандерсона: Откуда метод ninjectKernel.Get знает какой контроллер возвращать Кто знает подскажите как раскодировать сие чудо |
|
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
|
||||||
| 12.11.2021, 04:12 [ТС] | ||||||
|
strcat(arr, arr2); В этом случае не работает.
С данным типом char32_t наверное strcat не функционирует. Добавлено через 8 минут Видимо это тупиковый путь пользоваться этими типами char32_t. Не поддерживаются функциями они или я неправильно ими пользуюсь. Как 32 Битную поддержку организовать? Так не получается: char *a = u32"Жи-ши"; Добавлено через 6 минут Блин. UTF8 до 4 Байт ведь. Куда ещё больше надо. Добавлено через 2 минуты С char32_t конечно облом. Тип данных создали, но он нигде не работает. Добавлено через 1 час 39 минут В этой системе: *a = u8"Ж"; чтоб один символ массива взять нужно дополнительные лишние действия производить. Посимвольно непонятно как сохранять. --------- wchar_t идеальный тип, был бы такой же ещё, но для 32 бита ещё, тогда больше ничего и не надо было бы. В начале кода пишем: setlocale(LC_ALL, "Russian"); Перед символом нужную букву кодировки
Плюс бонусом wchar_t[10]; каждый элемент массива принимает размер нужного типа данных. В данном случае 2 Байта. Сказка. ----------------- *a = u8"Ж"; Здесь сохранили массив и теперь надо как то выковыривать из него символы по 2 Байта)) Добавлено через 42 минуты Весь Юникод может храниться в двух Байтах, это до числа 65535 http://foxtools.ru/Unicode Так что мне ещё надо. Двух Байт разве не хватит? ------------------- Но правда удобная система char a[10] = u8"Ж"; Не важно какого языка символ, он закодируется. Но работать с символами, элементами массива, когда они не имеют размеров типа символа... Добавлено через 1 час 31 минуту Аа, это Юникод до 2х Байт, а в UTF8 наверное те же самые символы в большее количество байт сохраняются.
0
|
||||||
|
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
|
|
| 12.11.2021, 08:16 [ТС] | |
|
Хотя так не получается:
SetConsoleOutputCP(CP_UTF8); char *a2 = u8"휸"; Ничего не выводит. HEX код у этого символа 34d738 Добавлено через 58 минут Кстати вот как пееводить из Юникода в UTF8. 1. Нужно определить нужное количество октетов для кодирования символа. На википедии хорошая таблица есть под названием: https://ru.m.wikipedia.org/wiki/UTF-8 Диапазон номеров символов. Требуемое количество октетов. Кароче после HEX 7F требуется два октета. Имеем символ 'Ж', HEX код этого символа в Юникоде == 0416. Десятичный код символа в Юникоде ==1046. Двоичный вид - для символа 'Ж' это получится 10000010110 https://i.voenmeh.ru/kafi5/Kam... /UTF-8.htm Теперь надо разделить этот 10000010110 двоичный код на две части. Остчитываем 6 бит с конца, делим и получаем 10000 010110 2. Установить старшие биты первого октета в соответствии с необходимым количеством октетов. Для кодирования символа 'Ж' нужно два октета. Поэтому устанавливаем в начале первого октета 110xxxxx А в начале второго октета 10xxxxxx В итоге получаем: (110)10000 (10)010110 Убираем скобки и переводим в HEX: 1101000010010110==D096
0
|
|
|
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
|
|
| 12.11.2021, 10:00 [ТС] | |
|
Можете написать хоть один символ в 3 Байта, который отображается в Visual Studio например?
Пытаюсь разобраться что произойдёт если в массиве окажутся символы с разным размером. char *a2 = u8"Жи-ши휸휸휸휸휸휸휸"; https://www.vssoft.bg/unicode-... d-symbols/ Не сохраняются, не отображаются. Добавлено через 53 минуты С однобайтовым и двухбайтовым символом проверил. char* a2 = u8"fЖ"; Все они сохраняются нормально. Непонятно только как определять границы символов. В char массиве понятно что каждый следующий байт это следующий символ. А здесь как? И как вывести в printf нужный Байт из такого массива? Или сохранить нужный символ из массива в другую переменную?
0
|
|
|
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
|
|
| 12.11.2021, 11:04 [ТС] | |
|
Сложно, неудобно.
Добавлено через 2 минуты Не хватает неявного преобразования массива в тип UTF8 с фиксированным размером каждого элемента массива в 4 Байта. Добавлено через 2 минуты Это чтоб элемент массива сейчас скопировать и вывести надо сначала memcpy использовать, перед этим надо знать размеры всех символов в массиве. ппц.
0
|
|
|
|
|||
| 12.11.2021, 11:13 | |||
|
Ну а вас кто-то заставляет это использовать? Вам зачем вообще юникод?
Добавлено через 2 минуты Всё уже
1
|
|||
|
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
|
|||||||
| 12.11.2021, 11:29 [ТС] | |||||||
|
Не понял. А зачем использовать копии уже существующих функций для UTF8?
Вот например strcat всё работает без сторонних функций.
Добавлено через 3 минуты А, ок. strncpy помогла бы.
0
|
|||||||
|
|
|||||||
| 12.11.2021, 11:48 | |||||||
|
strcat работает благодаря тому, что строка utf-8 всё ещё является null-terminated string.
Функции переписаны затем, что символы здесь - не фиксированной длины. Это вообще не область C. Добавлено через 7 минут Вот тут этим занимаются : https://icu.unicode.org/ Добавлено через 10 минут
1
|
|||||||
|
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
|
|||||||||||
| 13.11.2021, 04:03 [ТС] | |||||||||||
|
HEX код в этих трёх вариантах остаётся одним и тем же.
Все три варианта закодированы в Юникоде. В данном случае 0416 Не в utf8, ascii или utf16, а именно в Unicode.
В этих двух вариантах например HEX код меняется. Первый в ASCII, второй в UTF8 кодируется.
0
|
|||||||||||
|
из племени тумба-юбма
|
|
| 13.11.2021, 05:57 | |
|
koeltrad, зачем вы усложняете? Вся кириллица умещается в 1 байт, а вы пытаетесь запихнуть в 2 байта, это же не разумно.
0
|
|
|
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
|
|
| 13.11.2021, 06:34 [ТС] | |
|
То есть в итоге так сохранить будет достаточно? unsigned char a = 'Ж';
char до 127 unsigned char до 255 А это setlocale(LC_ALL, "Russian"); нужно только для того чтоб в консоле кириллица распознавалась? Добавлено через 1 минуту А точнее чтоб Юникод в консоле распознавался как кириллица. Потому что это wchar_t a = L'Ж'; конвертируется в Юникод. А Юникод до двух Байт. Поэтому тип переменной wchar_t Добавлено через 5 минут ---
0
|
|
|
|
|
| 13.11.2021, 11:09 | |
|
koeltrad, нет, однобайтовые национальные кодировки должны вымереть, слишком много проблем они создали. Сейчас надо использовать Unicode. Самый популярный - utf-8.
0
|
|
| 13.11.2021, 11:09 | |
|
Компилятор не знает тип ushort Свет светит не оттуда откуда должен Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|