powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Windows [игнор отключен] [закрыт для гостей] / Кодировка UTF-8 в консоли
6 сообщений из 6, страница 1 из 1
Кодировка UTF-8 в консоли
    #38003901
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь научить скрипты работать с UTF-8.
Скрипты перловые, поддержка UTF включается директивой use utf8 и ключом -C. Ну и сам pl-файл разумеется в кодировке UTF.
В консоли даю команду chcp 65001.
Запускаю скрипт и сталкиваюсь с тем, что при выводе к каждой строке, где есть не ANSI-символы, добавляется разный мусор:
Код: plaintext
1.
2.
3.
4.
5.
6.
H:\Perl>chcp
Active code page: 65001

H:\Perl>perl test.pl
Проверка2
�ка2
Код скрипта:
Код: perl
1.
2.
3.
4.
5.
6.
7.
#!/usr/bin/perl -C -w

use strict;
use warnings;
use utf8;

binmode(STDOUT,':utf8');
print "Проверка2\n";



________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
Кодировка UTF-8 в консоли
    #38004000
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, если сделать chcp 65001 и вывести файл в консоль (type test.pl), то кириллица читается нормально.
То есть мусор добавляет Perl (ActivePerl v5.16.1). Есть предположения, как это исправить?
Просьба модераторам перенести в соответствующую ветку.
...
Рейтинг: 0 / 0
Кодировка UTF-8 в консоли
    #38004037
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, что это проблема давняя.
Вроде бы связано с багом WriteFile, который ожидает размера данных в байтах, а Perl передает ему размер данных в символах.
Пока что использую консоль в стандартной кодировке (866) и для печати использую обертку:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
use utf8;
use Encode;
sub print()
{
  foreach (@_)
  {
    my $str = encode('cp866',$_);
    print "$str\n";
  }
}



Мне хотелось бы перегрузить оператор print.
Как это сделать?
...
Рейтинг: 0 / 0
Кодировка UTF-8 в консоли
    #38004123
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал так (pl-файл в кодировке UTF-8):
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
#!/usr/bin/perl -C -w

use strict;
use warnings;
use utf8;

binmode(STDIN, ':encoding(cp866)');
binmode(STDOUT,':encoding(cp866)');
print "Аргументы: " . join(' ',@ARGV) . "\n";



Запускаю:
Код: plaintext
1.
2.
3.
4.
5.
6.
H:\Perl>perl test.pl Тест
"\x{00d2}" does not map to cp866 at iptvportal.pl line 23.
"\x{00e5}" does not map to cp866 at iptvportal.pl line 23.
"\x{00f1}" does not map to cp866 at iptvportal.pl line 23.
"\x{00f2}" does not map to cp866 at iptvportal.pl line 23.
Аргументы: \x{00d2}\x{00e5}\x{00f1}\x{00f2}

Подскажите, что делаю не так?
По смыслу, для STDIN нужен слой :decoding, но такого нет.
...
Рейтинг: 0 / 0
Кодировка UTF-8 в консоли
    #38004261
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Пытаюсь научить скрипты работать с UTF-8.Не работает виндовая консоль c utf8 приемлимым образом.
...
Рейтинг: 0 / 0
Кодировка UTF-8 в консоли
    #38004366
Alex.Ello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с подобной проблемой но при использовании php

решения пока так и не удалось найти =(
притом в файл вывод работает прекрасно

console.phpтест
тест 2


cmd
chcp 65001
php-cgi.exe -f console.php
��ест
тест 2�ст 2 2
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Windows [игнор отключен] [закрыт для гостей] / Кодировка UTF-8 в консоли
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]