2011-07-02 5 views
2

이것은 내 테스트 코드입니다 : win32 strawberry perl을 사용하고 있습니다. 한자의 키,utf8 :: all - 강제하는 법 <STDIN/OUT> 큰 -5

는 오류 표시

use utf8::all; my $input = ;

:

utf8 "\xAD" does not map to unicode ..... 

나는 또한 UTF8로 스크립트를 작성 한을 :: 모두가 한자를 인쇄하려면 성공 할 수 없습니다 . utf8을 사용하거나 utf8을 사용하지 않으면 중국어 문자를 인코딩하여 인쇄 할 수 있습니다.

어떻게 다른 인코딩을 설정 하시겠습니까?

답변

1

Windows 명령 프롬프트의 코드 페이지를 UTF-8로 설정하는 해결 방법이 있지만 배포 할 수있는 솔루션이 아닙니다.

내 제안은 Perl에서 Big5를 사용하고 (CP950/zh-tw Windows에만 고정), 입/출력을 위해 텍스트 파일 I/O를 사용하는 것입니다.

또는 cgywin에서 bash/perl을 사용하여 UTF-8을 사용하는 것이 좋습니다.

6

How to set the to other encoding?

utf8::all을 사용할 수 없습니다. 인코딩 UTF-8은 인코딩되어 있습니다. 이 모듈의 이름은 결국 utf8::all이고 big5::all이 아닙니다.

을 명시 적으로으로 인코딩해야합니다 (http://p3rl.org/UNI 참조). 당신이 Windows에 있다고 말했기 때문에 인코딩 cp950을 사용하십시오.

use Encode qw(decode encode); 

my @arguments_as_characters = decode 'cp950', @ARGV; 
open my $file_handle, '<:encoding(cp950)', $file_name; 
print encode 'cp950', $data_to_stdout; 


How to open STDIN, STDOUT in cp950?

당신이 당신의 프로그램을 실행하면, 표준 스트림 이미 열려 있습니다! I/O layerbinmode으로 수정할 수 있습니다.

binmode STDOUT, ':encoding(cp950)'; 
+0

어떻게 cp950에서 STDIN, STDOUT을 열지? – Weiyan

0
use open IO => ':encoding(big5)'; 

또는

use open IO => ':encoding(cp950)'; 

또는

use open IO => ':locale';