Паскаль приложения в lazarus: кодировка

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

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

Паскаль приложения в lazarus: кодировка

Сообщение crazybabushka » 26.11.2010 21:13:27

Пишу на паскале в среде lazarus. Очень удобно, но возник вопрос по кодировке.
Код: Выделить всё
program test;
var
i : Word;
begin
write ('введите i:'#10#13); Readln(i);
 
       writeln('вы ввели: ',i); Readln;
end.   

Запускаю, и вижу проблемы с кодировкой кириллических символов.
Сервис -> Преобразовать кодировку проектов/пакетов не помогает
crazybabushka
незнакомец
 
Сообщения: 2
Зарегистрирован: 26.11.2010 21:04:04

Re: Паскаль приложения в lazarus: кодировка

Сообщение Nik » 26.11.2010 21:16:34

Для Lazarus стандартная кодировка - UTF8. Если вы запускаете консольную программу в старых версиях Windows, в консоли, скорее всего, UTF8 не поддерживается. Выводите (и вводите) текст в кодировка win-1252. Функции преобразования на форуме не раз упоминали.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Паскаль приложения в lazarus: кодировка

Сообщение Mr.Smart » 26.11.2010 22:01:26

У локализованной Windows в консоли используется кодировка CP866.
Как вариант, в лазарус выбираем кодировку файла CP866 в редакторе текста правую кнопку мыши далее Параметры файла->Кодировка->CP866.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Паскаль приложения в lazarus: кодировка

Сообщение crazybabushka » 26.11.2010 22:06:02

Nik писал(а):Для Lazarus стандартная кодировка - UTF8. Если вы запускаете консольную программу в старых версиях Windows, в консоли, скорее всего, UTF8 не поддерживается. Выводите (и вводите) текст в кодировка win-1252. Функции преобразования на форуме не раз упоминали.


Mr.Smart писал(а):У локализованной Windows в консоли используется кодировка CP866.
Как вариант, в лазарус выбираем кодировку файла CP866 в редакторе текста правую кнопку мыши далее Параметры файла->Кодировка->CP866.


Спасибо большое, разобрался.
crazybabushka
незнакомец
 
Сообщения: 2
Зарегистрирован: 26.11.2010 21:04:04

Re: Паскаль приложения в lazarus: кодировка

Сообщение shraibikus » 26.11.2010 23:25:10

Альтернативное решение:
Код: Выделить всё
function OemFromAnsi(sIn: String): string;
var
   s: string;
begin
     s:=sIn;
     AnsiToOem(PChar(s),PChar(s));
     Result:=s;
end;

procedure WriteLnOem(s: string);
begin
     WriteLn(OemFromAnsi(s));
end;
{...}
WriteLnOem('Привет!');
Аватара пользователя
shraibikus
новенький
 
Сообщения: 36
Зарегистрирован: 22.09.2009 16:22:42
Откуда: Столица деревень

Re: Паскаль приложения в lazarus: кодировка

Сообщение Mr.Smart » 26.11.2010 23:26:01

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

Re: Паскаль приложения в lazarus: кодировка

Сообщение shraibikus » 26.11.2010 23:29:39

Mr.Smart писал(а):shraibikus
Смысл? Программа консольная и прекрасно работает преобразование кодировок в Лазарус.

Т.е. есть готовые функции/модули преобразования кодировок? (просто непосредственно с FreePascal/Lazarus я начал плотно знакомиться относительно недавно).
И я привожу пример, если к примеру ожидается чтение из Ansi/Utf8.
Аватара пользователя
shraibikus
новенький
 
Сообщения: 36
Зарегистрирован: 22.09.2009 16:22:42
Откуда: Столица деревень

Re: Паскаль приложения в lazarus: кодировка

Сообщение Mr.Smart » 27.11.2010 00:15:42

В данном случае подразумевается, то что Лазарус использует для содержимого файла именно кодировку CP866 и никакие дополнительные преобразования не нужны.

Добавлено спустя 1 минуту 33 секунды:
А насчёт стандартных функций, то можно привести UTF8ToSys, UTF8ToConsole и т.д.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Паскаль приложения в lazarus: кодировка

Сообщение shraibikus » 03.12.2010 19:02:59

Mr.Smart писал(а):UTF8ToSys, UTF8ToConsole и т.д.

для этого нужен FileUtil
он есть, но почему-то в случае консольного приложения не находится. Да и к тому-же как я понял тянет за собой немерянную кучу зависимостей от других :(
Мой вариант не кроссплатформенен, но в случае использования голой Windows подходит и по моему быстрее :) Хотя, допускаю что я не прав.

upd
По сабжу кстати по форуму вот такие темы нарыл:
http://www.freepascal.ru/forum/viewtopic.php?f=1&t=5228&start=0&st=0&sk=t&sd=a
http://www.freepascal.ru/forum/viewtopic.php?f=5&t=3493&st=0&sk=t&sd=a&start=15
http://www.freepascal.ru/forum/blog.php?u=2921&b=13
кстати по UTF8Encode / UTF8Decode оказалась весьма полезной.
Там есть свои особенности. Это касается прежде всего если мы хотим к примеру сделать:
TStrings.SaveToFile
При этом сам модуль пишется в UTF8 (программа работает с UTF8), а результирующая файловая система (имена файлов) работает в кодировке cp1251 :(
Последний раз редактировалось shraibikus 04.12.2010 14:02:44, всего редактировалось 2 раз(а).
Аватара пользователя
shraibikus
новенький
 
Сообщения: 36
Зарегистрирован: 22.09.2009 16:22:42
Откуда: Столица деревень

Re: Паскаль приложения в lazarus: кодировка

Сообщение and » 03.12.2010 20:18:10

shraibikus писал(а):результирующая файловая система cp1251
FAT12/16/32 знаю... NTFS... UDF, Ext2/3/4, ReiserFS, JFS, XFS, ZFS...
А cp1251 - это что за файловая система такая?

:-D
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: Паскаль приложения в lazarus: кодировка

Сообщение shraibikus » 03.12.2010 20:24:16

and писал(а):
shraibikus писал(а):результирующая файловая система cp1251
FAT12/16/32 знаю... NTFS... UDF, Ext2/3/4, ReiserFS, JFS, XFS, ZFS...
А cp1251 - это что за файловая система такая?

:-D

сорри, исправил)))
Аватара пользователя
shraibikus
новенький
 
Сообщения: 36
Зарегистрирован: 22.09.2009 16:22:42
Откуда: Столица деревень

Re: Паскаль приложения в lazarus: кодировка

Сообщение and » 03.12.2010 22:32:15

Честно говоря, получилось ненамного лучше:
shraibikus писал(а):а результирующая файловая система работает в кодировке cp1251 :(
ФС - это лишь способ организации данных, а данные, как известно, работать не могут, они пассивны :-)
Работает код. В нашем случае, код драйвера ОС, обслуживающего конкретную ФС. Так, один и тот же файл с не-ASCII именем (выражайтесь конкретнее! проблема возможна с именем файла; на его содержимое всем - и ОС в т.ч. - глубоко начхать) может быть нормально доступен в одном случае, недоступен в другом и доступен с "кракозяберным" именем в третьем. (Регулярно наблюдаю такие эфекты, т.к. стоИт параллельно XPSP3 и 98SE. Про Ubuntu даже не говорю :-) ).
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: Паскаль приложения в lazarus: кодировка

Сообщение dunin » 03.12.2010 23:10:53

and писал(а):...т.к. стоИт параллельно XPSP3 и 98SE. Про Ubuntu даже не говорю :-)...

Позвольте поинтересоваться, а 98SE на кой ляд? :|
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Паскаль приложения в lazarus: кодировка

Сообщение Little_Roo » 03.12.2010 23:51:47

dunin писал(а):
and писал(а):...т.к. стоИт параллельно XPSP3 и 98SE. Про Ubuntu даже не говорю :-)...

Позвольте поинтересоваться, а 98SE на кой ляд? :|

А для пишущей машинки с ММХ целероном на 233 М -герцов и с мозгом 64 МБ :D (у машины, а не у кого Вы подумали)... таки оно работает, хотя это и не кошерно.... :mrgreen:
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Паскаль приложения в lazarus: кодировка

Сообщение and » 04.12.2010 09:15:10

Не, машинка малость пошустрее: PIV 2400 с гигом памяти (ох, и танцы с бубнами были, чтоб заставить 98SE на гиге работать!).
А 98SE по работе (старый софт сопровождать) и для души (прямой доступ к железу нужен).
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 8

Рейтинг@Mail.ru