次: , 前: Specifying Coding Systems, 上: Coding Systems


32.10.7 明示的な符号化と復号化

Emacsへ/からテキストを転送するすべての操作には、 テキストを符号化したり復号化するコーディングシステムを使う能力があります。 本節に述べる関数を用いてテキストを明示的に符号化したり復号化できます。

符号化の結果と復号化する入力は、通常のEmacsのテキストではありません。 それらは『生のバイト』、つまり、外部ファイルと同じ方法で テキストを表現するバイト列です。 バッファに生のバイトが収められている場合、 set-buffer-multibyte(see Selecting a Representation)を用いて バッファはユニバイト表現であると印を付けるのがもっとも自然ですが、 これは必須ではありません。 バッファの内容が単に一時的に生のバイトであるときには、 バッファはマルチバイトのままにしておきます。 バッファ内容を復号化すれば正しくなります。

明示的に復号化するためにバッファに生のバイトを入れる普通の方法は、 insert-file-contents-literally(see Reading from Files)で ファイルから読むか、 find-file-noselectでファイルを訪問するときに引数rawfilenil以外を指定します。

テキストの明示的な符号化で得た結果である生のバイトを使う普通の方法は、 ファイルやプロセスへそれらをコピーします。 たとえば、write-region(see Writing to Files)でそれらを書くには、 coding-system-for-writeno-conversionを束縛して write-regionの符号化を抑制します。

生のバイトには、正しいマルチバイト文字に 余分なトレイリングコードが付いたように見える長すぎるバイト列が 含まれる場合があります。 ほとんどの目的には、バッファや文字列のそのような列をEmacsは1文字として扱い、 その文字コードを調べるとマルチバイト文字の列に対応した値を得るはずです。 余分なバイト列は無視されます。 このふるまいは透明性がよくありませんが、 生のバイトはEmacsの限定された場面でのみ使われ、実用上の問題は回避できます。

— 機能: encode-coding-region start end coding-system

この関数は、コーディングシステムcoding-systemに従って startからendのテキストを符号化する。 符号化結果はバッファ内のもとのテキストを置き換える。 符号化結果は『生のバイト』であるが、 マルチバイトであったバッファはマルチバイトのままである。

— 機能: encode-coding-string string coding-system

この関数は、コーディングシステムcoding-systemに従って 文字列stringのテキストを符号化する。 符号化したテキストを含む新たな文字列を返す。 符号化結果は『生のバイト』のユニバイト文字列である。

— 機能: decode-coding-region start end coding-system

この関数は、コーディングシステムcoding-systemに従って startからendのテキストを復号化する。 復号化結果はバッファ内のもとのテキストを置き換える。 明示的な復号化が有用であるためには、 復号化前のテキストは『生のバイト』であること。

— 機能: decode-coding-string string coding-system

この関数は、コーディングシステムcoding-systemに従って 文字列stringのテキストを復号化する。 復号化したテキストを含む新たな文字列を返す。 明示的な復号化が有用であるためには、 復号化前のstringの内容は『生のバイト』であること。