IMAP 메일 디렉토리의 명령줄에서 수백 개의 디렉토리를 자동으로 생성하려면 즉시 UTF-8 문자열을 UTF-7-IMAP으로 변환할 수 있어야 합니다.
PHP에서는 문자열을 매개변수로 전달하여 이 작업을 수행하는 방법을 찾았지만 그다지 실용적이지 않으며 PHP를 설치해야 합니다.
<?php
echo mb_convert_encoding($argv[1], "UTF7-IMAP", "UTF8");
?>
Iconv는 UTF-7-IMAP에 대해 모르는 것 같습니다.
반대 작업을 수행할 수 있는 구문을 찾았습니다.
echo "Sant&AOk-" | tr "&" "+" | iconv -f UTF-7 -t UTF-8
Santé
하지만 이는 되돌릴 수 없습니다(마지막 "-"가 누락됨).
echo "Santé" | iconv -f UTF-8 -t UTF-7 | tr '+' '&'
Sant&AOk
인터넷에서 이에 대한 정보를 거의 찾을 수 없습니다.
편집하다:
나는 이것이 잘 작동한다는 것을 알았습니다.
perl -CSA -MEncode::IMAPUTF7 -le 'print Encode::IMAPUTF7::encode("IMAP-UTF-7", shift)' "Santé"
하지만 파이프라인을 만드는 방법은 무엇입니까?
echo "Santé" | perl ...
답변1
iconv
(또는 Debian 12에서 사용 가능한 최소 2.36 버전) 어떤 인코딩이 필요한지 알아보세요.
$ iconv -l | grep -i imap
UTF-7-IMAP//
그래서:
$ printf '%s\n' 'Santé' | iconv -f UTF-8 -t UTF-7-IMAP; echo ''
Sant&AOkACg-
$ printf '%s' 'Santé' | iconv -f UTF-8 -t UTF-7-IMAP; echo ''
Sant&AOk-
두 출력 모두 개행 문자가 누락되어 있으므로 echo는 가독성을 높이기 위해 결과 끝에 이를 추가하지만 개행 문자는예전에는인코딩하므로 문자열 끝에 LF를 추가하거나 추가하지 않으면 두 가지 다른 결과가 생성됩니다.
답변2
하지만사용iconv
(또는 recode
문자 세트 변환 전용 기타 도구) IMAP-UTF-7을 지원한다고 가정하면 명령이 인수 대신 입력을 처리 uconv
하도록 하려면 다음을 수행할 수 있습니다 .perl
$ echo Santé | perl -CIi -MEncode::IMAPUTF7 -pe '$_ = Encode::IMAPUTF7::encode("IMAP-UTF-7", $_)'
Sant&AOkACg-
-p
입력(또는 인수로 제공된 파일)을 읽고 이와 같이 각 줄에서 코드가 실행되는 sed
패턴 에 사용됩니다 . 와 달리 줄 구분 기호를 포함한다는 점을 제외하면 와 동일한 패턴 공간 입니다.perl
sed
$_
sed
perl
sed
를 사용하면 stdin 및 기타 입력(예: 인수에 있는 파일의 입력)에 UTF-8로 인코딩된 텍스트를 예상하도록 -CIi
지시하므로 perl
입력 시 자동으로 디코딩됩니다.
또는 Linux 기반 시스템과 같은 명령 출력 등 perl -pe '$_ = uc $_' 'uname|'
. 뒤에서 설명하는 다이아몬드 연산자를 LINUX
사용합니다 .<>
perldoc perlop