powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работает Utf8ToString ?
8 сообщений из 8, страница 1 из 1
Как работает Utf8ToString ?
    #39642206
Pcrepair
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Есть следующая ситуация :
функция Utf8ToString которой передается строка Спасибо Р·Р° ваше РїРёСЃСЊРјРѕ
на выходе все нормально, но
изначально без использования Utf8ToString, Length возвращает 43 символа, после Utf8ToString остается 24 символа

Вопрос : где остальные символы?
...
Рейтинг: 0 / 0
Как работает Utf8ToString ?
    #39642216
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pcrepair,

Их изначально своровали у цыган, а сейчас вернули )
...
Рейтинг: 0 / 0
Как работает Utf8ToString ?
    #39642246
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PcrepairВопрос : где остальные символы?
Length(строка) возвращает количество элементов строки, а не символов. У AnsiString и Utf8String элемент - это байт, у UnicodeString (и WideString?) элемент - это слово (Word).
Соответственно в вашем случае Length возвращает длину строки в байтах.
...
Рейтинг: 0 / 0
Как работает Utf8ToString ?
    #39642247
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpУ AnsiString и Utf8String элемент - это байт, у UnicodeString (и WideString?) элемент - это слово (Word).
Если быть более дотошным, то у AnsiString элемент - это AnsiChar, у Utf8String - это байт ( = AnsiChar), а у UnicodeString - это Char (= Word).
...
Рейтинг: 0 / 0
Как работает Utf8ToString ?
    #39642248
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почти вся правда про UTF-8
PS PcrepairLength возвращает 43 символа, после Utf8ToString остается 24 символа - это нормально.
Для дальнейшей беседы рекомендую указывать версию Dephi и предупреждаю, что в юникодных Delphi число байт и число символов будут ощутимо различаться, а так же о том, что "юникоды бывают разные" (с) Кролик.
...
Рейтинг: 0 / 0
Как работает Utf8ToString ?
    #39642268
Pcrepair
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
версия XE3

больше информации
- есть строки с разной кодировкой, Utf8ToString позволяет восстановить нужную кодировку (Спасибо Р·Р° ваше РїРёСЃСЊРјРѕ = Спасибо за ваше письмо)
- но нужно определять когда использовать функцию, так как отдельные строки не нуждаются в смене кодовой? страницы? там наоборот, если применить функцию выходят кракозябры
тут возникает задача как определить, применять функцию или нет, пока вот так :
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
BodyText:RawByteString;
s1,s2:string;

      s1:=BodyText;
      s2:=Utf8ToString(BodyText);
          if (Length(s1) > Length(s2)) then
          begin
            Memo1.Lines.Add(DeleteAllTegs(DelFullTegs(DelUseLessSymbol(s2)),FALSE));
          end
          else
          begin
            Memo1.Lines.Add(DeleteAllTegs(DelFullTegs(DelUseLessSymbol(s1)),FALSE));
          end;


но это какой то мутный способ. не уверен что 100% -ный
может есть еще способ определить, использовать Utf8ToString или нет?
...
Рейтинг: 0 / 0
Как работает Utf8ToString ?
    #39642275
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pcrepair,

Элементы UTF-8 имеют строго регламентированную маску и разнообразие бит. Кроме того, разумеется, каждый символ должен быть <= #$00ff

Это не гарантированный вариант, но на практике даст очень высокую точность.

А вообще лучше не смешивать ANSI и UTF-8
...
Рейтинг: 0 / 0
Как работает Utf8ToString ?
    #39642317
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pcrepair,

Кроме вышеприведённого совета ещё можно использовать статистический анализ текста, но стоит ли заморочек - вопрос.
Как пример: если текст точно русский, то можно посчитать количество символов "Р" в строке - если превышен некий порог, то значит это UTF8. Кстати, для латинского текста UTF8 совпадает с Win1252 AFAIK.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работает Utf8ToString ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]