utf8, UpperCase и другие

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

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

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

utf8, UpperCase и другие

Сообщение Ism »

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

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

Edit1.Text:=UpperCase('л');
Edit2.Text:=LowerCase('Л');


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

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

Lazarus 0.9.30

Добавлено спустя 6 минут 28 секунд:

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

Edit1.Text:=WideUpperCase('л');


возвращает вообще ?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Это нормально. Данные функции работают с Ansi кодировкой.
Ism писал(а):

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

Edit1.Text:=WideUpperCase('л');

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

Что за ОС?

Добавлено спустя 3 минуты 38 секунд:
С тормозил. Как данная функция должна, что-то вернуть, если кодировка у вас UTF-8.
Используйте следующую конструкцию

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

Edit1.Text:=UTF8Encode(WideUpperCase(UTF8Decode('л')));
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

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

Что за ОС?


Windows 7

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

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

function UpperCase(

  const s: String

):String;


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

Добавлено спустя 9 минут 3 секунды:
также AnsiStrIComp почемуто для русских символов регистрозависима
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

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
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

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

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

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

Edit1.Text:=UTF8Encode(WideUpperCase(UTF8Decode('л')))


Он более универсален
Аватара пользователя
rayanAyar
новенький
Сообщения: 42
Зарегистрирован: 06.01.2011 07:22:52
Откуда: Новоуральск

Сообщение rayanAyar »

Ism писал(а):

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

Edit1.Text:=UTF8Encode(WideUpperCase(UTF8Decode('л')))


Если строка изначальнов UTF8, то можно и сразу сделать, без двойного преобразования:

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

Edit1.Text:=UTF8UpperCase('л')
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

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

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

Сообщение GAMER »

что-то UTF8UpperCase перестала у меня работать в транковых версиях лазаруса. То "?" выдает, то пустое.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

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

Сообщение GAMER »

Тогда не удивительно :)
Я так понимаю, там что-то перелопачивают в связи с утф-8 (судя по багтрекеру).
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

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

Сообщение GAMER »

А что за тип и как его можно использовать?
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Когда напишут -- узнаем, сюрприз будет :) А пока лучше не обращать внимания на FPC trunk и пользоваться релизами или стабильными ветками.
Ответить