Проблемы при обработке строк с текстом на кириллице

Вопросы программирования и использования среды Lazarus.

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

Проблемы при обработке строк с текстом на кириллице

Сообщение asid » 04.09.2011 11:40:30

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
  s:='фыва';
  showmessage(copy(s,1,1));

end;

Проблема в том, что showmessage выдаёт пустое сообщение. Если переменной s изначально присвоить что-нибудь на английском языке, showmessage выведет первый символ. showmessage(s) показывает всё как надо.

Лазарус 0.9.30, самый свежий на момент написания сообщения.
ОС Windows 7 x86

Переустановка Lazarus результатов не принесла. Раньше работал в этой же системе с этим же Lazarus - такой проблемы не было.
asid
незнакомец
 
Сообщения: 4
Зарегистрирован: 04.09.2011 11:30:30

Re: Проблемы при обработке строк с текстом на кириллице

Сообщение Mr.Smart » 04.09.2011 11:43:36

Читаем про кодировку UTF-8 и смотрим в сторону функций вида UTF8*.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблемы при обработке строк с текстом на кириллице

Сообщение asid » 04.09.2011 11:57:08

Смущает то, что раньше всё работало. Полагаю, что проблема в каких-то настройках Lazarus
asid
незнакомец
 
Сообщения: 4
Зарегистрирован: 04.09.2011 11:30:30

Re: Проблемы при обработке строк с текстом на кириллице

Сообщение Mr.Smart » 04.09.2011 12:23:23

asid писал(а):Смущает то, что раньше всё работало. Полагаю, что проблема в каких-то настройках Lazarus

Раньше это какая версия. Начиная с версии 0.9.26 в LCL да и в самом IDE используется UTF-8.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблемы при обработке строк с текстом на кириллице

Сообщение asid » 04.09.2011 12:36:19

Да, пожалуй, вы правы. Только сейчас понял, что русский язык в таких ситуациях не использовал.
Не могу ничего найти про эти функции. Не подскажите где почитать или как быть в этом примере?
asid
незнакомец
 
Сообщения: 4
Зарегистрирован: 04.09.2011 11:30:30

Re: Проблемы при обработке строк с текстом на кириллице

Сообщение Mr.Smart » 04.09.2011 12:58:54

Модуль LCLProc
Код: Выделить всё
function UTF8CharacterLength(p: PChar): integer;
function UTF8Length(const s: string): PtrInt;
function UTF8Length(p: PChar; ByteCount: PtrInt): PtrInt;
function UTF8CharacterToUnicode(p: PChar; out CharLen: integer): Cardinal;
function UnicodeToUTF8(u: cardinal; Buf: PChar): integer; inline;
function UnicodeToUTF8SkipErrors(u: cardinal; Buf: PChar): integer;
function UnicodeToUTF8(u: cardinal): shortstring; inline;
function UTF8ToDoubleByteString(const s: string): string;
function UTF8ToDoubleByte(UTF8Str: PChar; Len: PtrInt; DBStr: PByte): PtrInt;
function UTF8FindNearestCharStart(UTF8Str: PChar; Len: integer;
                                  BytePos: integer): integer;
// find the n-th UTF8 character, ignoring BIDI
function UTF8CharStart(UTF8Str: PChar; Len, CharIndex: PtrInt): PChar;
// find the byte index of the n-th UTF8 character, ignoring BIDI (byte len of substr)
function UTF8CharToByteIndex(UTF8Str: PChar; Len, CharIndex: PtrInt): PtrInt;
procedure UTF8FixBroken(P: PChar);
function UTF8CharacterStrictLength(P: PChar): integer;
function UTF8CStringToUTF8String(SourceStart: PChar; SourceLen: PtrInt) : string;
function UTF8Pos(const SearchForText, SearchInText: string): PtrInt;
function UTF8Copy(const s: string; StartCharIndex, CharCount: PtrInt): string;
procedure UTF8Delete(var s: String; StartCharIndex, CharCount: PtrInt);
procedure UTF8Insert(const source: String; var s: string; StartCharIndex: PtrInt);
function UTF8LowerCase(const s: String): String;
function UTF8UpperCase(const s: String): String;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблемы при обработке строк с текстом на кириллице

Сообщение asid » 04.09.2011 13:05:04

unit1.pas(172,26) Error: Identifier not found "UTF8Copy"


Добавлено спустя 11 минут 35 секунд:
разобрался, про модуль не прочитал )
Огромное спасибо! )
asid
незнакомец
 
Сообщения: 4
Зарегистрирован: 04.09.2011 11:30:30


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru