Perl с использованием иностранных символов в Windows - PullRequest
2 голосов
/ 04 марта 2012

Я пытаюсь напечатать символы вроде ş, ı, ö, ç на турецком языке в Windows, используя perl, но я не смог этого сделать. Моя основная цель - создавать папки с использованием специальных символов в Windows.

Это мой код:

    use Text::Iconv;
    use strict;
   use warnings;
    $conve = Text::Iconv->new("windows-1254","UTF-16");
    $converted = $conve->convert("ş");
    print $converted;
    system("mkdir $converted");

Я получаю искаженный символ utf-8 (байт 0xfe) aa.pl в строке 7

1 Ответ

4 голосов
/ 05 марта 2012

Сохранить следующее как UTF-8:

use utf8;
use strict;
use warnings;
use open ":std", ":encoding(cp1254)";  # Set encoding for STD*
use Encode qw( encode );

my $file_name = "ş";
print "$file_name\n";
system(encode('cp1254', qq{mkdir "$file_name"}));

use utf8 сообщает Perl, что источником является UTF-8.

use open ":std", ":encoding(cp1254)"; вызывает кодирование текста, отправляемого в STDOUT и STDERR с использованием cp1254, и декодирование текста, считанного из STDIN, из cp1254.

Это не влияет на то, что отправляется на вызовы системы, такие как system, поэтому вам необходимо явно их кодировать.

...