Anon Sr
Anon Sr

Reputation: 25

Perl Using Foreign Characters in Windows

I'm trying to print characters like ş,ı,ö,ç in Turkish language in Windows using perl but I couldn't do it. My main purpose is creating folders using special characters in Windows.

This is my code:

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

I get a malformed utf-8 character (byte 0xfe) aa.pl at line 7

Upvotes: 2

Views: 383

Answers (1)

ikegami
ikegami

Reputation: 385546

Save the following as 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 tells Perl the source is UTF-8.

use open ":std", ":encoding(cp1254)"; causes text sent to STDOUT and STDERR to be encoded using cp1254, and it causes text read from STDIN to be decoded from cp1254.

It doesn't affect what is sent to sustem calls like system, so you need to encode those explicitly.

Upvotes: 4

Related Questions