Обращаться как с UTF-8 строкой

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Обращаться как с UTF-8 строкой

Сообщение hinst »

Допустим, у меня есть функция, которая возвращает указатель на UTF-8 строку (это просто известно, к примеру).

Код: Выделить всё

  function GetString: Pointer;

Указатель на последовательность символов в памяти.
И есть функция, которая принимает UTF-8 строку, но тип переменной уже "стандартный": UTF8String

Код: Выделить всё

  procedure DoIt(const s: UTF8String);

Если я сделаю

Код: Выделить всё

  DoIt(PAnsiChar(GetString));

то произойдёт преобразование строки ANSI в UTF-8. А как сделать, чтобы содержимое памяти, на которое указывает указатель, интерпретировалось как строка UTF-8 без преобразования? наверное,

Код: Выделить всё

  DoIt(PUTF8Char(GetString));

подошло бы, но типа PUTF8Char не существует
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

DoIt(UTF8String(GetString^)) не работает?
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Mirage писал(а):А как сделать, чтобы содержимое памяти, на которое указывает указатель, интерпретировалось как строка UTF-8 без преобразования? наверное,

Смысла в этом нет, для Lazarus все строки однобайтовая кодировка, когда нужно работать с UTF8 используются unicode функции которые работают с теми же ANSI, например UTF8Length
В новом fpc будет по другому, но в этом так

Добавлено спустя 6 минут 21 секунду:
Не по теме
Если работать в fpc, то лучше переводить в widestring , тогда fpc будет однозначно это воспринимать
http://wiki.freepascal.org/Widestrings
http://wiki.freepascal.org/FPC_Unicode_support
Ответить