Работа с UTF8 строками [решено]

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

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

Работа с UTF8 строками [решено]

Сообщение svsd_val » 12.10.2012 09:10:29

Программирую под Linux консольные приложения на FPC без !LCL!
Проблема в том что при работе с UTF8 строчками появляются странные глюки:
например:
const S : UTF8String = 'абвг'; ....
при попытке выбрать из UTF8 I'тый символ получаю пол символа , S[1] <> 'а' , приходится кидать move'ом по 2 байта
так же проблема идёт с распознаванием длин UTF8 строк , Length( S ) возвращает в 2 раза больше на не английских символах

как нить это можно исправить без использования LCL ?
Последний раз редактировалось svsd_val 12.10.2012 10:38:15, всего редактировалось 1 раз.
svsd_val
незнакомец
 
Сообщения: 9
Зарегистрирован: 12.02.2011 12:04:45

Re: Работа с UTF8 строками

Сообщение Brainenjii » 12.10.2012 09:21:00

самый просто способ - "позаимствовать" необходимое из LCL
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Работа с UTF8 строками

Сообщение svsd_val » 12.10.2012 09:44:54

если сам FPC не умеет работать с UTF8 а только через лазаруские LCL либы это будет очень и очень печально...
по этому охота найти способ корректной работы с UTF8
----
Единственный способ это "скакать" из кодировок но может есть способ напрямую работать с UTF8 ?

набросал пример:
Код: Выделить всё
const
A : UTF8String = 'а это лямбда - this is  lambda';
B : WideString = 'а это лямбда - this is  lambda';
begin
writeln( '[',A, '] [' , B,']');
Writeln( '[', A[1]+A[2] , '] [' , B[1]+B[2] ,']'); // вывод: "[а] [а]"

Writeln( UTF8Encode( UTF8Decode(A)[1] ) ); // получаем из UF8 кодировки символ "а" и переводим его в UTF8 кодировку
Writeln( Length( A ) , ' ' ,length(UTF8Decode(A)) ); // получаем длины 40 и 30
   
end.
Последний раз редактировалось svsd_val 12.10.2012 10:17:11, всего редактировалось 2 раз(а).
svsd_val
незнакомец
 
Сообщения: 9
Зарегистрирован: 12.02.2011 12:04:45

Re: Работа с UTF8 строками

Сообщение Brainenjii » 12.10.2012 10:08:40

Эм... Язык языком, библиотеки - библиотеками. В RTL поддержки UTF8, AFAIK, нет. Как нет там поддержки UTF16, SOAP, notification и многого другого, что вполне легко реализуется этим же языков в сторонних библиотеках. В данном случае такая библиотека уже есть, надо только вырезать нужный функционал (~10 минут работы)
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Работа с UTF8 строками

Сообщение svsd_val » 12.10.2012 10:13:47

я сейчас пост подправил, т.к. не верно выразился :
Единственный способ это "скакать" из кодировок но может есть способ напрямую работать с UTF8 ?
svsd_val
незнакомец
 
Сообщения: 9
Зарегистрирован: 12.02.2011 12:04:45

Re: Работа с UTF8 строками

Сообщение SSerge » 12.10.2012 10:16:49

Brainenjii писал(а):самый просто способ - "позаимствовать" необходимое из LCL


Самый простой, самый простой...

Зато самый правильный описан тут: http://www.freepascal.ru/article/freepa ... 718142000/ :D

svsd_val, читали?
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Работа с UTF8 строками

Сообщение svsd_val » 12.10.2012 10:18:06

SSerge - нет , спасибо почитаю
svsd_val
незнакомец
 
Сообщения: 9
Зарегистрирован: 12.02.2011 12:04:45


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru