文字列をUTF-8からUTF-7-IMAPに変換するには、パイプを作成する必要があります。

文字列をUTF-8からUTF-7-IMAPに変換するには、パイプを作成する必要があります。

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つの異なる結果が生成されます。

おすすめ記事