|
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
|
||||||
Позиция символа в UTF-8 строке12.12.2014, 00:16. Показов 7407. Ответов 16
Метки нет (Все метки)
Ведь вся латиница и доп. символы по 1 байту. Иероглиф японский вообще 3 байта. Тобиж конкретнее если то мне надо прогнать по всей строке циклом и расставить метки позиций.
0
|
||||||
| 12.12.2014, 00:16 | |
|
Ответы с готовыми решениями:
16
Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке Замена символа в строке на число соответствующему номеру по порядку вхождения этого символа в строку Конвертация из ASCII в UTF-32 или UTF-8 в UTF-32 |
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|
| 12.12.2014, 00:43 | |
|
Хранить/перекодировать файл в utf-16? Это куда меньший геморрой чем разбивать utf-8 на отдельные символы.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||||||
| 12.12.2014, 00:52 | ||||||
|
Redee, здесь. От обычной индексации с целью получения символов придется отказаться. Длина строки тоже будет давать длину в байтах, а не в символах. По ссылке есть инструменты для удобной навигации по такой строке.
Методы find, compare и т.п. работают нормально. Скажем, вот такой код отработает правильно, при условии что обе строки в UTF8:
1
|
||||||
|
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
|
|
| 12.12.2014, 07:41 | |
|
0
|
|
|
Диванный эксперт
|
||||||
| 12.12.2014, 08:16 | ||||||
|
Вот мой недопиленый велосипед для подсчета кол-ва символов в utf-8
0
|
||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|
| 12.12.2014, 13:36 | |
|
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 12.12.2014, 13:38 | ||
|
Другое дело, что на большинстве языков автор этого просто не заметит.
0
|
||
|
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
|
|
| 12.12.2014, 13:45 | |
|
0
|
|
|
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
|
|
| 12.12.2014, 21:43 [ТС] | |
|
Давайте еще проще.
Строка / буфер, консоль в utf-8, их нельзя менять в другую кодировку под страхом "расстрела на месте". Задача - Гарантировано вывести символ равный его порядковому номеру в строке. Выведи мне 3ий символ - получаю 3ий символ, при этом библиотека знает все признаки символов. А не так - выведи мне 3ий символ, хорошо выведу относительно позиции байта, а попало это на начало или в середине диапазона признака символа Проблемы уже Ваши. Да вы скажете блин зачем парить конторы вгоняю в кодировку 866 / 1251 там вся латиница с кирилицей по 1 байту и подсчитать и вывести нет ничего сложного, ну почти нет )). Посмотрю алгоритм Cra3y. Знаете недавно ища ответ на этот вопрос, натолкнулся на одну зарубежную статью про эти признаки, но решение показалось настолько Громоздким и Ужасным, что я в панике закрыл ту страницу. Неужели нет достойных простых решений. И это согласитесь не тот случай "нельзя вот так просто взять и..." Да блин НЕТ ЖЕ оно должно быть ПРОСТО. Ну это лишь мое видиние, или не видиние вопроса. Еще насчет перекодировки, почему я эту затею вообще начал. Замечательная библиотека libiconv прекрасно справляется со своей задачей. Но вот тут большое НО, так как она оперирует с исходным массивом на char, замечу не путать с char*. У меня там стоит буфер на char[100] к примеру. Скармливать я должен со строки UTF-8 опять же к примеру. Если так прикинуть если даже по 4 байта которые максимум оно может принять (utf-8 1 символ) - получается по 25 символов. Там могут быть теже иероглифы по 3 байта и опять же я НЕ уверен в точной позиции иероглифа. 25(100) гарантированных символов/байтов отдал, но НЕТ никакой уверенности нахожусь после 100 отданных байт вначале нового символа или прямо "в нем". Ну блин вы же тоже сталкивались с этой "проблемой". Конечно проблем нет когда символы максимум по 1 байт (866/1251). В utf-8 гарантировано лишь в том случае если работаем лишь с ASCII символами. Получилось громоздко, но хотел донести основную суть.
0
|
|
|
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
|
||||||
| 12.12.2014, 22:03 [ТС] | ||||||
|
Если интересно >>
Конечно коряво и НЕ доработано, но частично справляется.
0
|
||||||
|
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
|
|
| 12.12.2014, 22:11 [ТС] | |
|
На той же википедии хорошо основу UTF8 объясняют.
https://ru.wikipedia.org/wiki/UTF-8 Но ни бум бум как говорится...
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 12.12.2014, 22:18 | ||
1
|
||
|
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
|
||
| 12.12.2014, 22:43 [ТС] | ||
|
Ага вчера втыкал именно эту статью, до меня как до жирафа знаешь ли, но если пойму то надолго ).
Добавлено через 10 минут Качнул отсельда, будем внедрять. http://sourceforge.net/projects/utfcpp/ До конца недели надеюсь справлюсь. Добавлено через 6 минут Их там окромя utf8.h еще и checked.h / core.h / unchecked.h Дуплим, дуплим. Добавлено через 5 минут Вот такое решение и прилетает на помощь, на которое еще раз указал DrOffset. http://utfcpp.sourceforge.net/
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||||
| 12.12.2014, 23:41 | |||||||
1
|
|||||||
|
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
|
|
| 13.12.2014, 00:23 [ТС] | |
|
А если так все же ?)
Строка str = "фЫdz7" > Запрос - дай мне байты до 3го символа, ответ - кол-во байт до 3го символа = 5. Как это вытворить? Теперь я спокойно побайтово обрезаю зная точно что это конец буквы а НЕ середина символа. Тобиж в этом случае какая реализация?
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||||
| 13.12.2014, 00:30 | |||||||
Сообщение было отмечено Redee как решение
Решение
Redee, на всякий случай имей в виду, что checked версия utf8:: бросается исключениями, если что-то не так.
1
|
|||||||
|
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
|
|||||||||||
| 13.12.2014, 01:10 [ТС] | |||||||||||
Добавлено через 52 секунды Ооо спасибо, ща затещу. Добавлено через 2 минуты Круто, круто! ![]() Действительно мощный прием. Добавлено через 8 минут Очень выгодное взаимное использование utf8::distance(...) - по символам счет std::distance(...) - по байтам При этом итераторы точно указывают на позицию с помощью utf8::advance(...), который меняет текущую позицию итератора. Добавлено через 12 минут
Потестировал на японских / тайских символах. Все нормально также )). Да есть жеж. Добавлено через 2 минуты Огромное спасибо DrOffset-у.
0
|
|||||||||||
| 13.12.2014, 01:10 | |
|
Помогаю со студенческими работами здесь
17
В строке заменить каждый символ «!» числом, равным индексу этого символа в строке поиск в win1251 строке работает, а в UTF-8 - нет Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция Поиск символа в строке Замена символа в строке Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|