2010-06-15 4 views
1

이것은 This Question의 2 부제입니다.Perl 인 코드 - 영국 문자

그래서 나는 : encode 기능을 시도하지만 전혀 운이 없다.

use Encode; 
use utf8; 

# Should print: iso-8859-15 
print "Latin-9 Encoding: ".find_encoding("latin9")->name."\n"; 

my $encUK = encode("iso-8859-15", "UK €"); 
print "Encoded UK: ".$encUK."\n"; 

결과 :

Encoded UK: UK € 

이 결과는 인코딩 안

? 여기서 내가 뭘 잘못하고 있니?

편집 :

추가 제안 :

use utf8; 

을 지금은이 얻을 : 지금

Encoded UK: UK � 

당겨 머리를 :/

+0

스크립트에 인코딩 된 문자열을 삽입하려면'use utf8; '이 필요하지 않습니까? – Ether

+0

흠, 위의 편집을 참조하십시오. –

+0

'print "Latin-9 인코딩 :"... "행에서 무엇이 출력됩니까? – Ether

답변

4

이 당신의 머리를 잡아 당기지 마십시오. 당신은 모든 것을 올바르게했고, 끝났고 이미 의도 된 데이터를 얻고 있습니다. Latin-9 용으로 설정되지 않았지만 다른 인코딩 (아마도 UTF-8) 용으로 설정되지 않은 터미널에서 볼 수 있으므로 출력물이 사용자를 혼란스럽게합니다.

> perl -e'use utf8; use Encode; print encode "Latin-9", "Euro €"' 
Euro � 

> perl -e'use utf8; use Encode; print encode "Latin-9", "Euro €"' | hex 
0000 45 75 72 6f 20 a4         Euro . 

Codepoint A4 is indeed the Euro symbol in Latin-9.

+0

링크를 사용해 주셔서 감사합니다. 유로가 \ x {20AC} 인 것을 알고 있습니까? 여전히 나타나지만 다른 기호를 몇 개 시도해 보았습니다. \ x {00A3} –

+1

테이블을 잘못 읽고 있습니다. 'U + 20AC'는 유니 코드에서 유러 문자의 코드 포인트입니다. 그러나 여러분은 인코딩이'Latin-9 '라고 말했습니다. 행과 열 헤더를 사용하십시오. 'A'와 '4'는 'A4'를 제공합니다. 이 테이블은 온전한 검사만을위한 것이며,'\ x' 이스케이프 코드를 사방에 쓰면 Encode 모듈의 목적에 위배됩니다. wrong 잘못된 터미널 설정을 사용하기 때문에 대체 문자가 보입니다. 문자 인코딩을'Latin-9 '로 바꾸십시오. Per Perl에서 문자 인코딩에 대한 가장 좋은 설명은 http://p3rl.org/UNI이며, 모두 읽으십시오. – daxim

1

나는 아마도 당신이하지 생각 스크립트에서 문자를 올바르게 인코딩합니다. 편집자는 인코딩이 무엇이라고 생각합니까?

예컨대 난 그냥 완전히 것을 회피하기 위해,이 시도 :

use Encode; 

# Should print: iso-8859-15 
print "Latin-9 Encoding: ".find_encoding("latin9")->name."\n"; 

my $encUK = encode("iso-8859-15", "\xA3"); 
print "Encoded UK: ", $encUK, "\n"; 

출력 :

 
Latin-9 Encoding: iso-8859-15 
Encoded UK: £ 
+0

어디에서 찾을 수 있습니까? \ xA3이 인코딩이 아닙니까? –

+0

예, 작동하지만 두 번째 질문은 "영국의 모든 문자를 매핑해야합니까?"라고 생각합니다. 나는 encode()를 문자 £을 전달할 수 있고 \ xA3으로 인코딩 할 것이라고 생각했다. 그렇지 않다? –

+0

@ Phil : 16 진수 코드 차트를 찾으려면 "hex code uk pound symbol"을 검색해 보았습니다. 필자의 테스트 스크립트에 심볼을 제대로 삽입하기 위해 vim을 설치하는 데 올바른 인코딩을 찾을 수 없었기 때문입니다. 내부적으로는 \ xA3으로 표현되어야합니다 * 편집기가 문자를 적절하게 인코딩 했더라면 * 그렇지 않을 수도 있습니다. – Ether

0

"use utf8;" is, Perl 5.8 이후, 소스 파일이 UTF-8로 인코딩되었다는 것을 Perl에 알려주는 용도로만 사용됩니다.

소스의 인코딩이 실제로 당신이 말하는 펄과 일치합니까?

:set fenc=utf8 

그리고 파일을로드 할 때, 당신은 당신의 .vimrc에 fileencodings를 정의해야 UTF-8을 다시 얻을 수있는 '정력'으로

은 UTF-8에서 파일을 작성하려면이 옵션을 사용해야합니다 :

set fileencodings=ucs-bom,utf-8,latin9