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

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

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

crazybabushka
незнакомец
Сообщения: 2
Зарегистрирован: 26.11.2010 20:04:04

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

Сообщение crazybabushka »

Пишу на паскале в среде lazarus. Очень удобно, но возник вопрос по кодировке.

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

program test;
var
i : Word;
begin
 write ('введите i:'#10#13); Readln(i);
 
       writeln('вы ввели: ',i); Readln;
end.   

Запускаю, и вижу проблемы с кодировкой кириллических символов.
Сервис -> Преобразовать кодировку проектов/пакетов не помогает
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Для Lazarus стандартная кодировка - UTF8. Если вы запускаете консольную программу в старых версиях Windows, в консоли, скорее всего, UTF8 не поддерживается. Выводите (и вводите) текст в кодировка win-1252. Функции преобразования на форуме не раз упоминали.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

У локализованной Windows в консоли используется кодировка CP866.
Как вариант, в лазарус выбираем кодировку файла CP866 в редакторе текста правую кнопку мыши далее Параметры файла->Кодировка->CP866.
crazybabushka
незнакомец
Сообщения: 2
Зарегистрирован: 26.11.2010 20:04:04

Сообщение crazybabushka »

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


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


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

Сообщение shraibikus »

Альтернативное решение:

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

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('Привет!');
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

shraibikus
Смысл? Программа консольная и прекрасно работает преобразование кодировок в Лазарус.
Аватара пользователя
shraibikus
новенький
Сообщения: 36
Зарегистрирован: 22.09.2009 16:22:42
Откуда: Столица деревень
Контактная информация:

Сообщение shraibikus »

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

Т.е. есть готовые функции/модули преобразования кодировок? (просто непосредственно с FreePascal/Lazarus я начал плотно знакомиться относительно недавно).
И я привожу пример, если к примеру ожидается чтение из Ansi/Utf8.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

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

Добавлено спустя 1 минуту 33 секунды:
А насчёт стандартных функций, то можно привести UTF8ToSys, UTF8ToConsole и т.д.
Аватара пользователя
shraibikus
новенький
Сообщения: 36
Зарегистрирован: 22.09.2009 16:22:42
Откуда: Столица деревень
Контактная информация:

Сообщение shraibikus »

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 13:02:44, всего редактировалось 2 раза.
Аватара пользователя
and
постоялец
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Сообщение 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
Откуда: Столица деревень
Контактная информация:

Сообщение shraibikus »

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

:-D

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

Сообщение and »

Честно говоря, получилось ненамного лучше:
shraibikus писал(а):а результирующая файловая система работает в кодировке cp1251 :(
ФС - это лишь способ организации данных, а данные, как известно, работать не могут, они пассивны :-)
Работает код. В нашем случае, код драйвера ОС, обслуживающего конкретную ФС. Так, один и тот же файл с не-ASCII именем (выражайтесь конкретнее! проблема возможна с именем файла; на его содержимое всем - и ОС в т.ч. - глубоко начхать) может быть нормально доступен в одном случае, недоступен в другом и доступен с "кракозяберным" именем в третьем. (Регулярно наблюдаю такие эфекты, т.к. стоИт параллельно XPSP3 и 98SE. Про Ubuntu даже не говорю :-) ).
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

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

Позвольте поинтересоваться, а 98SE на кой ляд? :|
Аватара пользователя
Little_Roo
энтузиаст
Сообщения: 639
Зарегистрирован: 27.02.2009 18:56:36
Откуда: Санкт-Петербург

Сообщение Little_Roo »

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

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

А для пишущей машинки с ММХ целероном на 233 М -герцов и с мозгом 64 МБ :D (у машины, а не у кого Вы подумали)... таки оно работает, хотя это и не кошерно.... :mrgreen:
Аватара пользователя
and
постоялец
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Сообщение and »

Не, машинка малость пошустрее: PIV 2400 с гигом памяти (ох, и танцы с бубнами были, чтоб заставить 98SE на гиге работать!).
А 98SE по работе (старый софт сопровождать) и для души (прямой доступ к железу нужен).
Ответить