![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
господа-товарищи.
Просветите, пожалуйста, кто разбирается. как в ideone c его "Free Pascal Compiler version 2.6.4+dfsg-4 [2014/10/14] for i386" вывести строку с кириллицей посимвольно? ну, т.е. как сделать код: Код:
|
![]() |
![]() |
![]() |
#2 | |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]() Цитата:
Фишка в чем.. В неравномерности UTF8.. Давайте будем выводить коды символов, а не их графическое представление. Тогда получаем, что с ланинскими символами и цифрами все прекрасно. Косяк начинается с нашими. Смотри их кодировку. Вылезает еще один бит со значением 208 (я пока не понял что он делает). Он служебный. И если мы попытаемся его одного вывести, то он испачкает нам весь экран (надо будет с файликом проверить). А если мы найдем ему пару, то все прекрасно У Вас же 20-ый символ был именно 208-ой. Вот и получали Вы ничего. Теперь про вывод. Если это не критично, предлагаю так : тыц А если не ахти, то можно проверять символ на равенство 208 и там уже или продолжать |
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Только это помогло String[255], а так ор, что нет функций типа UTF8Length и прочих.
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 06.05.2015 в 19:59. |
![]() |
![]() |
![]() |
#4 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
Если строка в UTF-8, то либо никак, либо раскодируя UTF-8 вручную в кодовые точки и кодируя обратно в UTF-8 для вывода на экран. Или частично, проверяя лишь старшие биты лидирующего байта. В Википедии всё есть.
По стандарту Unicode байтовые последовательности UTF-8 являются единым целым, разбивать их нельзя. Неполные последовательности считаются битыми и должны валить ошибку или заменяться символом U+FFFD.
В разработке: воспроизводственный контур ИТ
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Всем отписавшимся в теме БОЛЬШОЕ СПАСИБО!
Poma][a, да, вижу, что Вы открыли для себя unicode. ![]() Спасибо за пример кода. как workaround вполне себе годится. Только обратите внимание на пост Vapaamies (в Unicode бывают не только двухбайтные символы, как в случае кириллицы, но и даже трёхбайтные). Аватар, простите, а Вы свой пример пробовали именно на http://ideone.com ? я и ранее подобное пытался сделать. И у меня он не заработал! тыц Vapaamies, ну да, Вы правы. прямо засада с этим UTF8 ![]() "либо раскодируя UTF-8 вручную в кодовые точки и кодируя обратно в UTF-8 для вывода на экран" вот, я надеялся, что в FPC что-то подобное есть в стандартных модулях/функциях. Но, похоже, что я ошибался. Ладно. В целом всё понятно. ещё раз спасибо. |
![]() |
![]() |
![]() |
#6 | ||
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]() Цитата:
тыц Цитата:
|
||
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]() Цитата:
![]()
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
![]() |
![]() |
![]() |
#8 | |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]() Цитата:
А конкретно в UTF-8 бывают не только двух- и трех-, но и четырехбайтные последовательности, причем используются они не только для редких китайских иероглифов, но и вполне русских смайликов, кодировку для которых придумали японцы. По идее, для UTF-8 должна быть своя реализация TEncoding или чего-то похожего, имеющая процедуры CharPrev и CharNext для посимвольного перебора туда-сюда. Есть ли такое в FPC, не скажу, ищите сами. А вообще про посимвольную обработку нужно забыть и работать с текстом как с текстом. На кой понадобилось его посимвольно в консоль выводить, например?
В разработке: воспроизводственный контур ИТ
|
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]() Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Аватар, гениально! это то, что я пытался сделать и не смог!!!!
БОЛЬШОЕ СПАСИБО! Vapaamies, спасибо за ликбез. Познавательно. только с этим Цитата:
Вот, например, пара простейших (классических) задач: 1) определить, сколько в заданном тексте одинаковых соседних букв. (собственно, я эту задачу и пытался решить, когда наступил на грабли с unicode) 2) дано слово. Определить, является ли оно палиндромом. 3) дано слово. Получить все возможные перестановки символов данного слова и это так, первое, что пришло в голову... Да и в практической жизни часто нужно получить какую-то часть строки (подстроку). p.s. Вот, теперь уже думаю, что тему можно закрывать. Возражений против закрытия нет, надеюсь? |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
PAnsiChar utf8 русские буквы ? | Должно быть имя? | Общие вопросы Delphi | 26 | 01.05.2015 15:21 |
Русские буквы в консоле С++ | Aleksander550 | Помощь студентам | 4 | 04.07.2014 10:33 |
Русские буквы | morgan97 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 10.03.2011 10:15 |
Русские буквы в программе | Rusl_v | Общие вопросы C/C++ | 5 | 16.01.2011 19:06 |