나는 몇 년 동안 lynx -dump
라틴어가 아닌 문자가 포함된 웹페이지의 콘텐츠를 "스크래핑" 해 왔습니다. 페이지 콘텐츠를 파일에 저장한 다음 sed 프록시를 통해 수정하고 이메일 본문에 포함하여 보냅니다. 이 모든 작업은 제가 만든 스크립트 내에서 발생합니다. 하지만 배포판(Ubuntu에서 Void로)을 전환한 후 스크립트가 예상대로 작동하지 않는다는 것을 발견했습니다. 아래와 같이 실패 지점을 확인했습니다.
명령줄에서 스크립트의 첫 번째 부분(내용 lynx -dump URL
과 내용을 저장하려는 파일 이름이 포함된 부분)을 실행하면 모든 것이 예상대로 작동합니다. 파일에는 내가 예상하는 비라틴어 문자가 표시되고 포함되어 있습니다. 하지만 cron 작업과 동일한 명령을 지정하여 프로세스를 자동화하려고 하면 결과가 다릅니다. 예상한 파일이 표시되지만 동일한 텍스트가 내가 원하는 것이 아닌 예상되는 비라틴어 문자를 포함하는 대신 라틴 문자로 음역되었습니다. 내 스크립트의 다음 내용은 라틴어가 아닌 문자의 존재 여부에 따라 달라지기 때문에 실패합니다.
그렇다면 cron 작업이 아닌 명령줄에서 lynx 명령을 실행하는지 여부에 따라 이러한 이상한 결과가 나타나는 이유는 무엇입니까? 어쩌면 사이트가 어떤 종류의 감지를 수행하고 한 경우에는 음역된 페이지를 제공하지만 다른 경우에는 제공하지 않을 수 있습니까? 아니면 Lynx 자체가 비라틴어 문자를 라틴 문자로 음역하고 있습니까? 의견을 주시면 감사하겠습니다.
답변1
lynx
현재 로캘을 사용하여 페이지를 표시하는 데 사용할 수 있는 문자 집합을 결정합니다. 그러나 이 정보를 사용하지 못할 수도 cron
있으므로 다음을 수행해야 합니다.
lynx -display_charset=UTF-8 -dump http://example.com/some/page.html
(물론 UTF-8과 다른 경우 시스템의 문자 집합을 사용하십시오.)
답변2
스라소니는 음역을 사용하세요로케일프롬프트로 설정하세요. 에서 실행하는 경우 cron
로케일은 POSIX일 가능성이 높습니다. 먼저 살펴보겠습니다.
Lynx 구성의 경우 여기에서 시작하십시오.
- 문자 집합(주제)
CHARACTER_SET
LOCALE_CHARSET
LOCALE_CHARSET
씌우다CHARACTER_SET
true인 경우 현재 로캘을 사용하여 해당 MIME 이름을 찾고 이를 표시 문자 집합으로 사용합니다.