Quoted-printable

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

Quoted-printableQP encodingとも呼ばれる)は、印字可能な文字(例えば、英数字や等号「=」)を使用した符号化方式であり、8ビットデータを7ビットデータパスで転送するためのものである。インターネット電子メールで使用できるようにするため、Content-Transfer-Encoding として定義されている。

概要[編集]

基本的なインターネット電子メール転送プロトコルであるSMTPでは、ASCII文字のみがサポートされている(8BITMIMEも参照)。MIMEでは、電子メールでASCII文字以外の情報を送信するためのメカニズムを定義している。これには、英語以外の言語の文字列を、ASCII以外の文字符号化方式を使用して扱うことが含まれる。しかしながら、これらの文字符号化方式ではASCII範囲外の値が頻繁に使用されるので、電子メールで適切に使用できるようにするためには、さらに符号化する必要がある。Quoted-printable符号化方式は、任意のバイト値を一連のASCII文字に変換するための方式である。この符号化方式は可逆変換であり、符号化されたバイト値が表す元のバイト値、つまり非ASCII文字に復元することができる。

Quoted-printableBase64は、2つの基本的な MIME Content-Transfer-Encoding である。入力文字列のほとんどがASCII文字である場合は、Quoted-printableで符号化した結果をほとんどそのまま読むことができ、データサイズも小さくなる。一方、入力文字列のほとんどがASCIIではない場合は、Quoted-printableを使用してもそのまま読むことはできず、サイズ効率も非常に悪い。Base64はそのまま読める方式ではないが、どのようなデータに対してでもサイズ効率は一定である。それで、バイナリー形式データやラテン文字ではない言語に対しては、Base64を選択するのが道理にかなっている。

電子メールクライアントによっては、Quoted-printable文字列を復号するときに、行末にドットがあると誤動作する場合がある。

Quoted-printableのエンコード[編集]

任意の8 ビットバイト値は、3文字に符号化される場合がある。これは、「=」の後ろにそのバイトの数値を表す2桁の16進数文字(0から9またはAからF)を付けたものである。例えば、US-ASCIIの改ページ(NP)文字(10進数で12)は「=0C」と表される。また、US-ASCIIの等号(10進数で61)は「=3D」になる。印字可能なASCII文字以外のすべての文字、および改行文字はこのようにして符号化される。

すべての印字可能なASCII文字(10進数で33から126)はそのまま変換なしに表される。ただし、「=」(10進数で61)だけは例外である。

ASCIIのタブ文字(10進数で9)およびスペース文字(10進数で32)はそのまま変換なしに表されるが、行末に現れた場合だけは例外である。これらの文字が行末に現れた場合は「=09」(タブ)および「=20」(スペース)に符号化されることになる。

符号化処理中のデータに、意味のある改行が含まれている場合、元のバイト値ではなくASCIIのCRLFの並びに符号化される。逆にいえば、バイト値10および13が行末の意味を持たない場合は「=0A」および「=0D」に符号化される。

Quoted-printable で符号化したデータの行は、76文字を超えてはならない。符号化した文字列を変換せずにこの要件を満たすため、必要に応じてソフト改行 が追加される。ソフト改行は符号化後の行末に「=」が置かれたものであり、復号した文字列には改行は現れない。

参照[編集]