既存のバッファや文字列を、ユニバイトであったものをマルチバイトとして、あるいはその逆に解析することが有用な場合があります。
現在のバッファの表現型を設定します。multibyte が nil 以外の場合、バッファはマルチバイトになります。multibyte が nil
の場合、バッファはユニバイトになります。
この関数は、バッファの内容をバイト列として見た場合には変更しません。その結果、文字として見た場合の内容が変更されることがあります。例えば、マルチバイト表現では1文字として扱われる3バイトのシーケンスは、ユニバイト表現では3文字としてカウントされます。生のバイトを表す8ビット文字は例外です。これらはユニバイトバッファでは1バイトで表現されますが、バッファがマルチバイトに設定されると2バイトのシーケンスに変換され、その逆も同様です。
この関数は、どの表現が使用されているかを記録するために enable-multibyte-characters
を設定します。また、バッファ内の各種データ(オーバーレイ、テキストプロパティ、マーカーなど)を調整し、以前と同じテキストをカバーするようにします。
この関数は、バッファが狭められた場合にエラーを通知します。これは、マルチバイト文字シーケンスの途中で狭めが行われた可能性があるためです。
この関数は、バッファが間接バッファである場合にもエラーを通知します。間接バッファは常に、基となるバッファの表現を継承します。
以下の2つの関数は廃止されており、今後のEmacsのバージョンで削除される予定です。代わりにencode-coding-stringを使用してください。
string が既にユニバイト文字列である場合、この関数は string 自体を返します。そうでない場合は、string と同じバイト列を持ちつつ、各バイトを個別の文字として扱う新しい文字列を返します(そのため、値に含まれる文字数が string より多くなる場合があります)。例外として、生のバイトを表す各8ビット文字は単一のバイトに変換されます。新しく作成された文字列にはテキストプロパティは含まれません。
string がマルチバイト文字列の場合、この関数は string 自体を返します。それ以外の場合は、string と同じバイト列を持ちつつ、各マルチバイトシーケンスを1文字として扱う新しい文字列を返します。つまり、その値は string よりも文字数が少なくなる可能性があります。string 内のバイトシーケンスが、単一文字のマルチバイト表現として無効な場合、そのシーケンス内の各バイトは生の8ビットバイトとして扱われます。新しく作成された文字列にはテキストプロパティは含まれません。