Программирую под Linux консольные приложения на FPC без !LCL!
Проблема в том что при работе с UTF8 строчками появляются странные глюки:
например:
const S : UTF8String = 'абвг'; ....
при попытке выбрать из UTF8 I'тый символ получаю пол символа , S[1] <> 'а' , приходится кидать move'ом по 2 байта
так же проблема идёт с распознаванием длин UTF8 строк , Length( S ) возвращает в 2 раза больше на не английских символах
как нить это можно исправить без использования LCL ?
Работа с UTF8 строками [решено]
Модератор: Модераторы
Работа с UTF8 строками [решено]
Последний раз редактировалось svsd_val 12.10.2012 10:38:15, всего редактировалось 1 раз.
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
самый просто способ - "позаимствовать" необходимое из LCL
если сам FPC не умеет работать с UTF8 а только через лазаруские LCL либы это будет очень и очень печально...
по этому охота найти способ корректной работы с UTF8
----
Единственный способ это "скакать" из кодировок но может есть способ напрямую работать с UTF8 ?
набросал пример:
по этому охота найти способ корректной работы с 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 раза.
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Эм... Язык языком, библиотеки - библиотеками. В RTL поддержки UTF8, AFAIK, нет. Как нет там поддержки UTF16, SOAP, notification и многого другого, что вполне легко реализуется этим же языков в сторонних библиотеках. В данном случае такая библиотека уже есть, надо только вырезать нужный функционал (~10 минут работы)
я сейчас пост подправил, т.к. не верно выразился :
Единственный способ это "скакать" из кодировок но может есть способ напрямую работать с UTF8 ?
Brainenjii писал(а):самый просто способ - "позаимствовать" необходимое из LCL
Самый простой, самый простой...
Зато самый правильный описан тут: http://www.freepascal.ru/article/freepa ... 718142000/
svsd_val, читали?
SSerge - нет , спасибо почитаю
