2010-07-02 2 views
1

Я применяю кодировку UTF-8 для STDIN и STDOUT. Однако как я могу убедиться, что я применяю кодировку UTF-8 к файлу, который я передаю в свой код ниже (<> будет читать из файла вместо STDIN, если текстовый файл передается в командной строке) в виде нескольких строк, таких как возможное.Кодировка UTF-8 на дескрипторе файла в Perl

use open qw(:std :utf8) 

while (<>) { 
    print; 
} 
+1

возможно дубликат [Как читать UTF-8 с оператором алмаза (<>)?] (HTTP://stackoverflow.com/questions/519309/how-do-i-read-utf-8-with-diamond-operator) – Ether

ответ

1

Согласно документации open Pragma, вы уже получили поведение, которое вы хотите:

open Прагма служит в качестве одного из интерфейсов декларируют по умолчанию «слои» (также известный как " дисциплин ") для всех операций ввода-вывода. Любые два аргумента open, readpipe (aka qx//) и аналогичные операторы, найденные в лексической области этой прагмы, будут использовать объявленные значения по умолчанию. Эта трехмерная аргументация может быть затронута даже при использовании трех аргументов, когда они не задают уровни ввода-вывода в режиме MODE.

Документация perlop говорит нам, что while (<>) { ... } эквивалентно

unshift(@ARGV, '-') unless @ARGV; 
    while ($ARGV = shift) { 
    open(ARGV, $ARGV); 
    while (<ARGV>) { 
     ... # code for each line 
    } 
    } 
+0

Итак, дескриптор файла обрабатывается так, как будто он поступает из STDIN. Я читаю документацию perlop, но в ней явно не указано, что? – syker

+0

@syker Нет, он использует дескриптор файла ARGV, как указано выше. Цитированная выдержка из документации 'open' pragma указывает, что она применяется к * all * I/O. –

Смежные вопросы