Проблема : Win32, Кодировка, русский язык

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

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

Аватара пользователя
EmeraldMan
постоялец
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород
Контактная информация:

Сообщение EmeraldMan »

Проверил...
Лучше использовать директиву {$codepage utf8}, а не преобразовывать в UTF-8 с BOM.
В Windows работает без разницы, однако в Ubuntu ругался как раз на символ BOM. Интересно ругался - в принципе компилировался, однако если визуально настраивать событие например у обычного Button - OnClick, то не создавал событие, а кричал на этот символ. Т.е. для кросс-компиляции не годится преобразование с BOM.
К слову, в версии Ubuntu преобразования в UTF-8 с BOM пока нет.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

ВОМ для utf-8 считается Microsoft-специфичной сущностью, в отличие от BOM для utf-16. Хотя... кто ругался-то? Lazarus?
Аватара пользователя
EmeraldMan
постоялец
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород
Контактная информация:

Сообщение EmeraldMan »

Ага, именно он и ругался... но при этом компилировался, просто события новые не хотел добавлять (например onClick).
bigcrown
незнакомец
Сообщения: 2
Зарегистрирован: 20.09.2022 13:19:54

Сообщение bigcrown »

Ferrum писал(а):Всем доброго времени суток!
Проблема на самом деле банальна, но с подвохом...
Вобщем, в лазарус, скажем,

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

MessageBox(0,0,'Русь',0);
выдаст сообщение с абракадаброй вместо русского слова. Проблема обходится, если использовать функцию перевода кодировок

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

MessageBox(0,0,PChar(UTF8ToAnsi('Русь')),0);
В современном Лазарус UTF8ToANSI не помогает - кракозябры остаются - скрин прикладываю во вложении.

Как мне сделать MessageBox с русскими буквами?
непомогает.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
bigcrown
незнакомец
Сообщения: 2
Зарегистрирован: 20.09.2022 13:19:54

Сообщение bigcrown »

Вот так:

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

MessageBoxW(0, PWideChar(UTF8ToUTF16('Я победил кракозябры!')), PWideChar(UTF8ToUTF16('Заголовок')), MB_OK+MB_TASKMODAL);
В uses добавить модуль LazUTF8.
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Использовать Application.MessageBox - это просто правильная обёртка над системным MessageBox. Не нужно будет извращаться с перекодировками
delphius
постоялец
Сообщения: 131
Зарегистрирован: 18.03.2020 12:40:11

Сообщение delphius »

bigcrown писал(а):Вот так:

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

MessageBoxW(0, PWideChar(UTF8ToUTF16('Я победил кракозябры!')), PWideChar(UTF8ToUTF16('Заголовок')), MB_OK+MB_TASKMODAL);
В uses добавить модуль LazUTF8.
А почему тогда, например, не вот так? :roll:

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

program project1;
   uses JwaWinUser;
begin
     MessageBoxW(0, PWideChar(UTF8Decode('Я победил кракозябры!')), PWideChar(UTF8Decode('Заголовок')), MB_OK+MB_TASKMODAL);
end.
Под чистым fpc компилится, не тянет за собой LazUtils...
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

delphius писал(а):А почему тогда, например, не вот так?
КОД: ВЫДЕЛИТЬ ВСЁ
program project1;
   uses JwaWinUser;
begin
     MessageBoxW(0, PWideChar(UTF8Decode('Я победил кракозябры!')), PWideChar(UTF8Decode('Заголовок')), MB_OK+MB_TASKMODAL);
end.


Под чистым fpc компилится, не тянет за собой LazUtils...
Хм, а почему тогда, например, не вот так?

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

program project1;
   uses Windows;
begin
     MessageBoxW(0, Pointer(UTF8Decode('Я победил кракозябры!')), Pointer(UTF8Decode('Заголовок')), MB_OK+MB_TASKMODAL);
end.
Под чистым fpc компилится, не тянет за собой JwaWinUser...
delphius
постоялец
Сообщения: 131
Зарегистрирован: 18.03.2020 12:40:11

Сообщение delphius »

iskander писал(а):Хм, а почему тогда, например, не вот так?
Тем более))) я просто исходил из предыдущих условий использования Jedi
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

delphius писал(а):я просто исходил из предыдущих условий использования Jedi
А можно поинтересоваться насчёт предыдущих условий использования Jedi?
delphius
постоялец
Сообщения: 131
Зарегистрирован: 18.03.2020 12:40:11

Сообщение delphius »

iskander писал(а):А можно поинтересоваться насчёт предыдущих условий использования Jedi?
Без понятия) все было в контексте решений других участников беседы)
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

delphius писал(а):Без понятия)
Вот так обычно всегда и есть.
delphius
постоялец
Сообщения: 131
Зарегистрирован: 18.03.2020 12:40:11

Сообщение delphius »

iskander писал(а):Вот так обычно всегда и есть.
Можно заливать на прод :mrgreen: :mrgreen: :mrgreen:
Ответить