필자의 perl 스크립트로 생성 한 출력 파일은 그 값을 삽입 할 때 독일어 "움라우트"를 올바르게 처리하지 않는 UNIX SQLplus 프레임 워크에서 사용되기 때문에 코드 세트 cp1252가 아니라 UTF-8을 사용해야합니다. 데이터베이스 열 (Windows 10에서 strawberry perl v5.18을 사용하며 UNIX SQL 환경에서 NLS_LANG 또는 chcp를 설정할 수 없음).Windows 10에서 perl> = 5.18의 출력 파일에 대해 코드 세트 cp1252를 강제 실행하는 방법은 무엇입니까?
이 작은 테스트 스크립트를 사용하면 출력 파일 "testfile1.txt"는 항상 UTF-8이지만 "testfile2.txt"는 예상대로 CP1252라는 것을 재현 할 수 있습니다. "testfile1.txt"의 출력이 텍스트 내에 "특수"문자가 없어도 CP1252가되도록하려면 어떻게해야합니까?
#!/usr/bin/env perl -w
use strict;
use Encode;
# the result file under Windows 10 will have UTF-8 codeset
open(OUT,'> testfile1.txt');
binmode(OUT,"encoding(cp-1252)");
print OUT encode('cp-1252',"this is a test");
close(OUT);
# the result file under Windows 10 will have Windows-cp1252 codeset
open(OUT,'> testfile2.txt');
binmode(OUT,"encoding(cp-1252)");
print OUT encode('cp-1252',"this is a test with german umlauts <ÄäÜüÖöß>");
close(OUT);
_Schei 인코딩 ... _ :) – simbabque
그 빠르고 훌륭한 답변에 감사드립니다. 따라서 "인코딩 유형"은 파일 내에 "키"로 저장되지 않지만 그 안에 저장된 이진 값에 의해 정의됩니다. 필자의 필자는 필자가 편집자가 선택한 코드 세트로 파일을 저장할 수있는 옵션을 제공했다. 그런데 괄호 안에 두 개의 "open"문을 묶어야하는 이유는 무엇입니까? – drvolk
@drvolk 수정하십시오. 텍스트 파일은 자체 인코딩을 저장하지 않습니다. 프로그램은 인코딩이 무엇인지 알기 만하면됩니다 (또는 파일의 바이트를 기반으로 추측하지만 잘못 될 수 있습니다). 내 코드의 블록은'$ out' 핸들의 범위를 제한하는 것입니다. – melpomene