Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > кодировка в perl


Автор: subudai 18.8.2010, 23:13
всем добрый вечер
возникла вот такая проблема у меня, при переводе формата pl в exe через программу perl2exe, нехочет отображаться русская кодировка.
вот программный код,
Код

#!/usr/bin/perl
$|=1;
END { read(STDIN, my $buf,1); }
use encoding 'cp1251', STDOUT => 'cp866';
print "это калькулятор, написаный на языке perl\n";
print <<FIRST;
принцип работы калькулятора следущий:
1. вы водите число (если не введено число, то автоматом подставляет 0)
2. вы водите с клавиатуры знак("-","+","x" и т.д.)
3. вы вводите второе число";
и получаем ответ";
         * длля нахождение корня числа водите sqrt
FIRST
print "\nведите любое число\n";
$a = <STDIN>;
chomp $a;
if ($a =~ /[0-9]\b/i) {

}
else { 
print "неверно ввод данных\n";
$a = <STDIN>;
chomp $a;
while ($a =~ /[^0-9]\b/i){
print "введите число(*в данный момент вы водите буквы)\n";
$a = <STDIN>;
chomp $a;
} print "теперь вы можете вводить знак\n";
}
$name = <STDIN>;
chomp ($name);
if ($name =~ s/\+/здгы/egimosx) {
# операция сложения
print "введите второе число\n"; 
$b = <STDIN>;
good_chis();
$s = ($a+$b);
print "Ответ: $s";
}


else { print "произошла ошибка. попробуйте заново"; }


sub good_chis {
if ($b =~ /[0-9]\b/i) {

}
else { 
print "неверно ввод данных\n";
$b = <STDIN>;
chomp $b;
while ($b =~ /[^0-9]\b/i){
print "введите число(*в данный момент вы водите буквы)\n";
$b = <STDIN>;
chomp $b;
} 
}
}


использовал в качестве кодировки вот такой код:
Код

use encoding 'cp1251', STDOUT => 'cp866';
, но при компиляции выдаёт ошибку.
если удалить этот код, то работает всё хорошо, но не отображается правильно кирилица.
незнаю что делать, очень нужны ваша помощь

Автор: Jimy 18.8.2010, 23:30
Сохраните исходник в нужной кодировке и не придется ничего перекодировать при выводе в STDOUT

Автор: subudai 18.8.2010, 23:33
Jimy
а как сохранить исходник в нужной кодировке?
я просто сохраняю с форматом pl, а как по другому?
как сохранить в нужной кодировке

Автор: vadiml 19.8.2010, 09:00
subudai, 
pl -- это не формат, а расширение, формат -- plain text

А перекодировать можно любым нормальным редактором или, например, использовать iconv

Автор: Jimy 19.8.2010, 13:04
Цитата(subudai @  18.8.2010,  23:33 Найти цитируемый пост)
а как сохранить исходник в нужной кодировке?


Судя по тому, что Вы используете

use encoding 'cp1251', STDOUT => 'cp866';

сам текст программы Вы набрали в кодировке cp1251.
и соответственно print'ы выводят текст (который зашит в исходнике) именно в этой кодировке.
Просто пересохраните файл в кодировке cp866.
Как это сделать - ответили выше а также поисковики выдадут много вариантов по этому вопросу.

Автор: subudai 19.8.2010, 15:58
ну вот попробовал через Notepad поменить кодировку на UTF-8, тоже самое происходит, конвертирует, но не запускается формат exe.
вот сама ошибка которая выдаётмя при конвертации
Код

Converting 'kallkulator.pl' to kallkulator.exe
Warning: Can't locate I18N/Langinfo.pm
at C:\usr\lib\encoding.pm line 44
@ING = C:\usr\lib, C:\usr\site\lib, .

Автор: Jimy 19.8.2010, 16:56
Цитата(subudai @  19.8.2010,  15:58 Найти цитируемый пост)
попробовал через Notepad поменить кодировку на UTF-8


Ну даже и не знаю. Может стоит попробовать поменять на китайскую традиционную?

smile

Автор: shamber 20.8.2010, 10:24
Цитата(Jimy @  19.8.2010,  16:56 Найти цитируемый пост)
китайскую традиционную?

[irony] поможет? [/irony]

Автор: subudai 20.8.2010, 11:58
мда...  зачем уже флудить в теме?
я задал вопрос, чтоб получить ответ, а не вашу критику, в частности от Jimy и флуд от shamber

Автор: shamber 20.8.2010, 13:03
subudai, многоуважаемый...... читайте пожалуйста не только между строк....

Цитата(Jimy @  19.8.2010,  13:04 Найти цитируемый пост)
Просто пересохраните файл в кодировке cp866.

Цитата(subudai @  19.8.2010,  15:58 Найти цитируемый пост)
ну вот попробовал через Notepad поменить кодировку на UTF-8

ну и кто после этого флудит?

Добавлено @ 13:05
Вы мало того что не воспользовались поиском, эта тема обсуждалась уже не раз, так вы в каждой теме проявляете чудеса чтения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)