문제

Perl에 작성된 성숙한 CGI 응용 프로그램을 수정하고 콘텐츠 인코딩 문제가 나타났습니다. 브라우저는 컨텐츠가 ISO-8859-1 인코딩되었으며 응용 프로그램은 HTTP 헤더의 숯으로 ISO-8859-1을 선언하지만 실제로 인코딩. Perldoc 튜토리얼에 설명 된 다양한 인코딩 기술 중 어느 것도 (인코딩, 부호화, 열려 있는)는 코드에 사용되므로 문서가 실제로 인코딩되는 방식에 대해 약간 혼란스러워합니다.

언급 한 바와 같이, 응용 프로그램은 상당히 성숙하며 현재 인코딩 방법의 많은 부분을 초래할 수 있습니다. 내가 찾아야 할 레거시 또는 더 이상 사용되지 않은 기술을 아는 사람이 있습니까? Perl은 개발자가 방향을 제공하지 않을 때 어떤 인코딩에 대해/기본값을 가정합니까?

감사

도움이 되었습니까?

해결책

기본적으로 Perl은 스트링을 바이트 시퀀스로 처리하므로 파일에서 읽고 STDOUT에 인쇄하면 동일한 바이트 시퀀스를 생성합니다. 템플릿이 라틴어 1 인 경우 출력도 라틴어 1입니다.

텍스트 문자열 컨텍스트에서 문자열을 사용하는 경우 ( uc, lc 문자열이 이전에 해독되지 않는 한, Perl은 라틴 -1 의미론을 가정합니다.

Perl, Charsets 및 Encoding에 대한 자세한 내용

다른 팁

Perl은 아무것도 가정하지 않지만 브라우저는 일반적으로 추측을 기반으로 인코딩을 가정합니다. 인코딩 기술이 사용되지 않은 경우 문서는 작성된대로 직접 출력됩니다.

HTTP 컨텐츠 유형 헤더에서 숯을 지정할 수 있습니다.

내가 가장 먼저 보는 장소는 서버 구성입니다. 프로그램에서 컨텐츠 인코딩 헤더를 설정하지 않으면 서버의 추측을 선택할 수 있습니다.

스크립트를 서버와 별도로 실행하여 실제 출력이 무엇인지 확인하십시오. 서버가 CGI 프로그램 (NPH가 아닌)에서 출력을 가져 오면 서버는 클라이언트로 보내기 전에 누락 된 것으로 생각되는 헤더를 수정합니다.

브라우저가 컨텐츠를 ISO-8859-1로보고하는 경우 Perl 스크립트가 숯을 지정하기 위해 올바른 헤더를 출력하지 않았을 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top