“utf8″pragma를 사용하여 Perl 스크립트를 작성하려고하는데 예상치 못한 결과가 나타납니다. Mac OS X 10.5 (Leopard)를 사용하고 있으며 TextMate로 편집하고 있습니다. 내 편집기와 운영 체제에 대한 모든 설정은 기본적으로 utf-8 형식으로 파일을 작성하도록되어 있습니다.
그러나 텍스트 파일에 다음을 입력하고 “.pl”로 저장하고 실행하면 ASCII가 아닌 문자 대신 친숙한 “물음표가있는 다이아몬드”가 표시됩니다.
#!/usr/bin/env perl -w
use strict;
use utf8;
my $str = 'Çirçös';
print( "$str\n" );
내가 뭘 잘못하고 있는지 아십니까? 출력에서 ‘Çirçös’를 기대하지만 대신 ‘ ir s’를 얻습니다.
답변
use utf8;
유니 코드 출력을 활성화하지 않습니다 . 프로그램에 유니 코드를 입력 할 수 있습니다. 당신의 print()
진술 앞에 이것을 프로그램에 추가하십시오 :
binmode(STDOUT, ":utf8");
도움이되는지 확인하십시오. STDOUT
일반 ASCII 대신 UTF-8로 출력 해야합니다 .
답변
open pragma를 사용할 수 있습니다 .
예를 들어. 아래는 UTF-8을 사용하도록 STDOUT, STDIN 및 STDERR을 설정합니다 ….
use open qw/:std :utf8/;
답변
TMTOWTDI 는 작업 방식에 가장 적합한 방법을 선택했습니다. 환경 방법을 사용하므로 생각할 필요가 없습니다.
에서 환경 :
export PERL_UNICODE=SDL
상의 명령 행 :
perl -CSDL -le 'print "\x{1815}"';
또는 binmode 사용 :
binmode(STDOUT, ":utf8"); #treat as if it is UTF-8
binmode(STDIN, ":encoding(utf8)"); #actually check if it is UTF-8
또는 PerlIO 사용 :
open my $fh, ">:utf8", $filename
or die "could not open $filename: $!\n";
open my $fh, "<:encoding(utf-8)", $filename
or die "could not open $filename: $!\n";
또는 open pragma 사용 :
use open ":encoding(utf8)";
use open IN => ":encoding(utf8)", OUT => ":utf8";
답변
또한 코드의 문자열은 utf-8이라고 말하고 싶습니다. 최신 Perl은 기본적으로 UTF-8을 사용하지 않는 이유를 참조하십시오 . . 그래서 설정 PERL_UNICODE=SDAL
뿐만 아니라 PERL5OPT=-Mutf8
.
답변
감사합니다. 마침내 코드 전체에 utf8 :: encode를 넣지 않는 해결책을 찾았습니다. utf8에서 파일 쓰기 및 읽기와 같은 다른 경우를 합성하고 완료하고 utf8에서 YAML 파일의 LoadFile과 함께 작동합니다.
use utf8;
use open ':encoding(utf8)';
binmode(STDOUT, ":utf8");
open(FH, ">test.txt");
print FH "something éá";
use YAML qw(LoadFile Dump);
my $PUBS = LoadFile("cache.yaml");
my $f = "2917";
my $ref = $PUBS->{$f};
print "$f \"".$ref->{name}."\" ". $ref->{primary_uri}." ";
여기서 cache.yaml은 다음과 같습니다.
---
2917:
id: 2917
name: Semanário
primary_uri: 2917.xml
답변
쉘에서 수행하십시오 : $ env | grep LANG
이것은 아마도 쉘이 utf-8 로케일을 사용하지 않는다는 것을 보여줄 것입니다.