Русские символы и кодировки в Linux

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

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

Русские символы и кодировки в Linux

Сообщение Rasmussen » 19.07.2012 14:57:15

Добра всем!
Имеется такой вопрос.
Есть ArchLinux x86_64 с KDE на борту.
В чём суть вопроса.
Имеется такой простенький код:
Код: Выделить всё
var
inp:char;
outp:integer;
begin
inp:='ё';
outp:=ord(inp);
writeln(outp);
end.


Итак, его скомпилировать в Lazarus или FPC IDE, то получим такую ошибку:
Error: Incompatible types: got "Constant String" expected "Char"


Однако же если тот же код скомпилировать и запустить в Geany с кодировкой UTF-8 (которая тоже изпользует тот же fpc и передаёт код компилятору командой /usr/bin/fpc "%f"), то всё работает на ура!

Собственно, вопрос - как научить работать FPC и Lazarus с нужной кодировкой?
Насколько я понимаю, это зависит от той кодировки, с которой работает редактор?
Что же я, собственно, делаю не так?
Rasmussen
новенький
 
Сообщения: 13
Зарегистрирован: 02.07.2012 21:33:54

Re: Русские символы и кодировки в Linux

Сообщение Mr.Smart » 19.07.2012 15:27:55

SizeOf(Char) чему равен?
А SizeOf('ё')?
Отсюда вывод, а насчёт Geany не понял. Чушь какая-то.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Русские символы и кодировки в Linux

Сообщение Rasmussen » 19.07.2012 15:47:32

Чушь или нет - судить не мне, однако факт остаётся фактом - в Geany всё отлично срабатывает.
Вот такой код, запущенный из Geany:
Код: Выделить всё
var
lat, cyr:char;
begin;
lat:='ё';
cyr:='f';
  if (sizeof(lat) = sizeof(cyr)) then
   writeln('True! Lat. = ', sizeof(lat),', cyr. = ', sizeof(cyr))
  else
   writeln('Fail! Lat. = ', sizeof(lat),', cyr. = ', sizeof(cyr));
end.


...возвращает значение:

True! Lat. = 1, cyr. = 1
Rasmussen
новенький
 
Сообщения: 13
Зарегистрирован: 02.07.2012 21:33:54

Re: Русские символы и кодировки в Linux

Сообщение SSerge » 19.07.2012 15:52:06

Версия FreePascal какая?
Если 2.7.х - прошу прочесть только что опубликованное: http://sirserge.altai.info/articles/?id=44

Если младьшая, в любом случае при работе с исходником в utf8 забудьте про char. Нет его.
Компилятор все правильно пишет - "ё" это constant string, а inp у вас - несовместимый с присвоением типа char, однобайтовый.
Как работать с utf в lazarus/старых fpc - здесь: http://sirserge.altai.info/articles/?id=41
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Русские символы и кодировки в Linux

Сообщение Ism » 19.07.2012 15:53:32

Какая разница, fpc работает в UTF8

Код: Выделить всё
var
  s:string;
  inp:char;
begin
s:=UTF8ToAnsi('ё')
inp:=s[1];
outp:=ord(inp);


Добавлено спустя 6 минут 19 секунд:
Да , UTF8ToAnsi в линукс криво работает
Лучше

UTF8ToCP1251

Добавлено спустя 5 минут 10 секунд:
http://wiki.freepascal.org/LCL_Unicode_Support
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Русские символы и кодировки в Linux

Сообщение SSerge » 19.07.2012 16:14:34

Ism писал(а):Какая разница, fpc работает в UTF8


В том и разница, если вы ЗАСТАВИТЕ fpc работать в utf-8, то ждет вас весьма неожиданное. :D
А то, что вы приводите в пример - это когда fpc игнорирует кодовую страницу исходника и работает с побайтовым представлением литералов, заключенных в кавычки.

И, переводить юникод в байтовые строки - вообще то искажать обрабатываемую информацию :)

Еще раз, читайте, как сделать правильно: http://sirserge.altai.info/articles/?id=44

Я знаю, что то что там написано, вам не понравится. Но оно не то что Будет, оно уже де-факто Есть.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Русские символы и кодировки в Linux

Сообщение Ism » 19.07.2012 16:24:04

Ну оно для fpc 2.7 , а он еще не вышел

С UTF8 в fpc 2.6 есть специальный модуль
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Русские символы и кодировки в Linux

Сообщение Rasmussen » 19.07.2012 17:30:36

Мда, как-то грустно всё это.
Всех благодарю за помощь!
Rasmussen
новенький
 
Сообщения: 13
Зарегистрирован: 02.07.2012 21:33:54

Re: Русские символы и кодировки в Linux

Сообщение debi12345 » 19.07.2012 22:11:16

Да все отлично у FPC с юникодом, ни разу не встретил проблем !
Самое главное чтобы на "границе" с ОС выполнялось првильное конвертирование OS_LOCALE-vs-UCS2 - а FPC это умеет.
А если нужны текстовые константы внутри исходников - использовать для них WideString либо редактор в кодировке UTF8, ну и компилировать проекты с опцией "-Fcutf8".
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru