Perl은 처음부터 Unicode 친화적이지 않았으며, UTF-8 작업에는 명시적인 지시가 필요합니다. 현재의 Perl은 문자열을 내부 추상화(utf8-flagged scalars)로 저장할 수 있지만, 입출력 작업은 특별한 주의가 필요합니다.
binmode, :encoding(UTF-8)).use utf8;을 사용하십시오.open my $fh, '<:encoding(UTF-8)', 'myfile.txt' or die $!; binmode STDOUT, ':encoding(UTF-8)';
Encode, utf8, open, charnames.use Encode; my $bytes = encode('UTF-8', $string); # 바이트 얻기 my $string = decode('UTF-8', $bytes); # 문자열 얻기
print/read 함수조차 레이어의 설정이 필요합니다.스크립트의 시작 부분에
use utf8;을 추가하는 것만으로 모든 입출력 작업이 UTF-8에서 이루어질까요?
답변: 아니요! use utf8; 지시는 소스 코드에서 유니코드 리터럴을 해석할 뿐입니다. 입출력에 대해서는 open 또는 binmode/open pragma를 통해 IO 레이어를 설정해야 합니다! 예를 들어:
binmode STDOUT, ':encoding(UTF-8)'; open my $fh, '>:encoding(UTF-8)', $filename;
역사
역사
역사
Perl 서비스를 MySQL 클라이언트와 통합할 때 클라이언트를 utf8로 설정하는 것을 무시하고 바이트 문자열로 작업했습니다. 웹 인터페이스와의 접점에서 결함이 발생했으며, 일부 문자는 손상되어 전달되었고, 일부 쿼리는 데이터 구조를 "파손"시켰습니다. Encode를 통한 명시적 재인코딩과 'mysql_enable_utf8' 설정이 도움이 되었습니다.