utf8, UpperCase и другие

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

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

utf8, UpperCase и другие

Сообщение Ism » 12.06.2011 00:07:26

Привет,
столкнулся с проблемой, не работает UpperCase для UTF8

Код: Выделить всё
Edit1.Text:=UpperCase('л');
Edit2.Text:=LowerCase('Л');


возвращает ту же букву не преобразовывая в верхний или нижний регистр

это глюк или я чтото не так сделал ?

Lazarus 0.9.30

Добавлено спустя 6 минут 28 секунд:
Код: Выделить всё
Edit1.Text:=WideUpperCase('л');


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

Re: utf8, UpperCase и другие

Сообщение Mr.Smart » 12.06.2011 00:44:18

Это нормально. Данные функции работают с Ansi кодировкой.
Ism писал(а):
Код: Выделить всё
Edit1.Text:=WideUpperCase('л');

возвращает вообще ?

Что за ОС?

Добавлено спустя 3 минуты 38 секунд:
С тормозил. Как данная функция должна, что-то вернуть, если кодировка у вас UTF-8.
Используйте следующую конструкцию
Код: Выделить всё
Edit1.Text:=UTF8Encode(WideUpperCase(UTF8Decode('л')));
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: utf8, UpperCase и другие

Сообщение Ism » 12.06.2011 00:51:55

Код: Выделить всё
Что за ОС?


Windows 7

прикол в том, что здесь говорится, что
http://lazarus-ccr.sourceforge.net/docs ... rcase.html

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

  const s: String

):String;


А так как String по умолчанию в freepascal UTF8 , то функция должна работать

Добавлено спустя 9 минут 3 секунды:
также AnsiStrIComp почемуто для русских символов регистрозависима
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: utf8, UpperCase и другие

Сообщение Odyssey » 12.06.2011 01:58:29

Ism писал(а):А так как String по умолчанию в freepascal UTF8

Это не так. String кодируется в utf-8 только в Lazarus LCL. Библиотеки Free Pascal - RTL и FCL - работают со строками в системной однобайтной кодировке, либо в ASCII. Поэтому для работы с utf-8 приходится пользоваться функциями из LCL, которые в основном находятся в модуле LCLProc. Одна из таких функций - Utf8UpperCase.

Ism писал(а):прикол в том, что здесь говорится, что
http://lazarus-ccr.sourceforge.net/docs ... rcase.html

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

  const s: String

):String;


Там же, чуть дальше, пишут:
only ASCII codes below 127 are converted
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: utf8, UpperCase и другие

Сообщение Ism » 12.06.2011 02:37:33

ой не посмотрел

использовал вариант Mr.Smart

Код: Выделить всё
Edit1.Text:=UTF8Encode(WideUpperCase(UTF8Decode('л')))


Он более универсален
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: utf8, UpperCase и другие

Сообщение rayanAyar » 12.06.2011 05:30:10

Ism писал(а):
Код: Выделить всё
Edit1.Text:=UTF8Encode(WideUpperCase(UTF8Decode('л')))


Если строка изначальнов UTF8, то можно и сразу сделать, без двойного преобразования:
Код: Выделить всё
Edit1.Text:=UTF8UpperCase('л')
Аватара пользователя
rayanAyar
новенький
 
Сообщения: 42
Зарегистрирован: 06.01.2011 08:22:52
Откуда: Новоуральск

Re: utf8, UpperCase и другие

Сообщение Ism » 12.06.2011 18:44:10

Edit1.Text:=UTF8UpperCase('л') не был виден в модулях, так как было уже сказано , что функция из LCLProc

Спасибо всем.
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: utf8, UpperCase и другие

Сообщение GAMER » 18.10.2011 13:24:48

что-то UTF8UpperCase перестала у меня работать в транковых версиях лазаруса. То "?" выдает, то пустое.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: utf8, UpperCase и другие

Сообщение Odyssey » 18.10.2011 17:01:16

Какая версия FPC? Если 2.7.x -- то неудивительно, её пока лучше не использовать.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: utf8, UpperCase и другие

Сообщение GAMER » 18.10.2011 17:19:28

Тогда не удивительно :)
Я так понимаю, там что-то перелопачивают в связи с утф-8 (судя по багтрекеру).
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: utf8, UpperCase и другие

Сообщение Odyssey » 18.10.2011 18:07:13

Там пишут новый тип строк с поддержкой юникода.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: utf8, UpperCase и другие

Сообщение GAMER » 18.10.2011 21:25:02

А что за тип и как его можно использовать?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: utf8, UpperCase и другие

Сообщение Odyssey » 18.10.2011 22:34:55

Когда напишут -- узнаем, сюрприз будет :) А пока лучше не обращать внимания на FPC trunk и пользоваться релизами или стабильными ветками.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24


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

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

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

Рейтинг@Mail.ru