<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 
<dfn><code>-*- coding -*-</code></dfn>
は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">テキストファイル</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字コード</anchor>を指定するものです。</p><section><h1>値</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 
<code>coding</code>
の値には
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">coding system</anchor>
を指定できます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
<cite>Emacs</cite> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">coding system</anchor> は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字コード</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">改行コード</anchor>を組合せた概念です。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字コード</anchor>の名称または<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字コード</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">改行コード</anchor>を組合せた名称を記述できます。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>coding system</anchor> </sw-see></p></section><section><h1>文脈</h1><section><h1><code>-*-</code> 行</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> 
<cite>Emacs</cite> では <code>-*-</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行</anchor>に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">局所変数</anchor>を記述できます。
<code>-*-</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の先頭 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor> があればその次) の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行</anchor>に記載します。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <code xmlns="http://www.w3.org/1999/xhtml">-*-</code> </sw-see></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> 
記述できる特別な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">局所変数</anchor>の1つが <code>coding</code> です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-16</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-32</anchor> などでも機能するのかは定かではありません。</p></section><section><h1>局所変数群並び</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 
<cite>Emacs</cite> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">局所変数群並び</anchor>に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">局所変数</anchor>を記述できます。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">局所変数群</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の末尾に記載します。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>局所変数群並び</anchor> </sw-see></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> 
記述できる特別な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">局所変数</anchor>の1つが <code>coding</code> です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">局所変数群</anchor>と <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-16</anchor> のような組合せが機能するのかは定かではありません。</p></section><section><h1>複数個の指定</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">局所変数</anchor>は複数個記述できます。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>局所変数</anchor> </sw-see></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> 
<code>coding</code> が複数個指定されたとき適当に動作するかどうかは定かではありません。
特に、矛盾する値が指定されたときの挙動は不明瞭です。</p></section></section><section><h1>マジックコメントによるスクリプトエンコーディングの指定 (Ruby)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Ruby</anchor> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプトエンコーディング</anchor>の指定に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マジックコメント</anchor>を使えます。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> 
構文として、</p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <code><dfn># coding:</dfn> <var>エンコーディング</var></code></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <code><dfn># encoding:</dfn> <var>エンコーディング</var></code></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> <code># -*- <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">coding:</anchor> <var>エンコーディング</var> -*-</code><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> <cite>Emacs</cite> の <code>-*-</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行</anchor></li></ul></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> <code># <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">vim:</anchor>set <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">fileencoding</anchor>=<var>エンコーディング</var>:</code><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> <cite>Vim</cite> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">モード行</anchor></li></ul></li></ul><p>などがあります。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> 「など」が何を指すのかは定かではありません。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> 
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マジックコメント</anchor>は、
1行目に置くことができます。ただし 1行目が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor> のときは、
その次の行に置くことができます。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> 
ここで、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor> は</p><blockquote><pre>#!/bin/sh
exec ruby19 -x &quot;$0&quot; &quot;$@&quot;
#!ruby
# coding: utf-8</pre></blockquote><p>のような場合も想定され、 <code>-x</code> が指定された場合に
<code>#!</code> で始まり <code>ruby</code> を含む<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行</anchor>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor> になるとされています。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src>
これがどういうことかドキュメント上明らかではありませんが、
1行目が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor> で <code>ruby</code> でない場合は、
<code>ruby</code> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor> を探し、それを <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor>
とみなした次の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">魔法注釈</anchor>である、
ということでしょうか。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor> がかなり後ろの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行</anchor>になることも考えられますが、
どこまで探すかの制限があるのかどうか、ドキュメント上明らかではありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> 
現行ドキュメントによると、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">魔法注釈</anchor>の
<dfn><code>encoding</code></dfn>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">指令</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>を表すのであり、
<dfn><code>coding</code></dfn>
はその別名と説明されています。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;30</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> 
また、 <code>-*-</code> 構文は通常1行1<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">指令</anchor>で書かれる <code># encoding:</code>
構文を複数<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">指令</anchor>まとめて1行にできる別構文とされています。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;30</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> 
これによれば <code>-*-</code> には <code>coding</code> だけでなく <code>encoding</code>
とも記述できます。また、他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">指令</anchor>も記述できます。
ただし、それらのうち <cite>Emacs</cite> と同等に解釈されるのはおそらく
<code>coding</code>
だけです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> 
値として期待されるのは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Ruby</anchor> が認識する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">エンコーディング</anchor>の名前のようです。
<cite>Emacs</cite> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">coding-system</anchor> の名前とは主要な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字符号化</anchor>の名前に於いて重なりますが、
同一ではありません。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><figure xmlns="http://www.w3.org/1999/xhtml" class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <cite xml:lang="ja-JP">多言語化 (Ruby 1.9.3)</cite>
(<time>2015-12-14 00:26:12 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://docs.ruby-lang.org/ja/1.9.3/doc/spec=2fm17n.html#magic_comment">http://docs.ruby-lang.org/ja/1.9.3/doc/spec=2fm17n.html#magic_comment</anchor-external></figcaption><blockquote><p>マジックコメントを使うことにより Ruby 実行系にスクリプトエンコーディングを 伝えることができます。マジックコメントとはスクリプトファイルの1行目に書かれた</p><p># coding: euc-jp</p><p>という形式のコメントのことです。1 行目が shebang である場合、マジックコメントは 2 行目に 書くことができます(それ以降の行ではいけません。無視されます)。上の形式以外にも</p><p># encoding: euc-jp</p><p># -*- coding: euc-jp -*-</p><p># vim:set fileencoding=euc-jp:</p><p>などの形式を解釈します。</p><p>#!/bin/sh</p><p>exec ruby19 -x &quot;$0&quot; &quot;$@&quot;</p><p>#!ruby</p><p># coding: utf-8</p><p>このように -x オプションを使っている場合には「#! で始まり、ruby がある行」 の次の行に書きます。</p></blockquote></figure><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> 
<cite xml:lang="en">comments - Documentation for Ruby 3.5</cite>, <time>2025-11-01T13:20:22.000Z</time>, <time>2025-11-06T14:00:29.582Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://docs.ruby-lang.org/en/master/syntax/comments_rdoc.html#label-encoding+Directive">https://docs.ruby-lang.org/en/master/syntax/comments_rdoc.html#label-encoding+Directive</anchor-external></li></ul></refs><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pod</anchor> にも <code># ENCODING:</code> を書く流儀 (非標準) があるようです。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>=encoding</anchor> </sw-see></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> 標準の方法は <code xmlns="http://www.w3.org/1999/xhtml">=encoding</code> です。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Ruby</anchor> との関連は不明です。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">大文字と小文字</anchor>の違いがありますが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Ruby</anchor>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pod</anchor> のどちらとも、少なくてもドキュメント上は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">大文字と小文字</anchor>を区別しないとは説明されていません。</p></section><section><h1>魔法注釈による符号化の指定 (Python)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Python</anchor>
では
<dfn>PEP 263</dfn>
の提案により<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">魔法注釈</anchor>として記述できます。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正規表現</anchor></p><blockquote><pre>^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)</pre></blockquote><p>に一致するとき、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">群</anchor>で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">捕獲</anchor>された部分が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>の名前です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> 
これは最初の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行</anchor>で検査され、一致しなければ2つ目の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行</anchor>で検査されます。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> 文言通り解釈すると、最初の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行</anchor>に何らかの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Python</anchor> のコードがあり、
2行目に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">魔法注釈</anchor>があることも認められているようです。
本来の意図は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor> を認めることと思われますが。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end> 次のような指定が想定されています。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal></src></p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end> <code># coding=<var>符号化名</var></code></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="48" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[48]</anchor-end> <code># This Python file uses the following encoding: utf-8</code></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="49" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[49]</anchor-end> <pre>#!/usr/local/bin/python
# coding: latin-1</pre></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> <pre>#!/usr/bin/python
# -*- coding: <var>符号化名</var> -*-</pre></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> <pre>#!/usr/bin/python
# -*- coding: latin-1 -*-</pre></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> <pre>#!/usr/bin/python
# vim: set fileencoding=<var>符号化名</var> :</pre></li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> 
ファイルの先頭に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-8</anchor> <sw-cn xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">BOM</sw-cn> を置くことができ、
その場合、指定された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>は <code>utf-8</code> でなければなりません。
そうでなければエラーとなります。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end> 
指定された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>が認識できないとき、エラーとなります。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="50" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[50]</anchor-end> 
この方法は 
<cite>Emacs</cite>,
<cite>Vim</cite>
の一般的な指定方法に対応可能であり、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Ruby</anchor>
の一般的な指定方法とも同等ですが、
厳密な評価をしないかわりに簡潔に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化名</anchor>を取り出すことができます。
<cite>Emacs</cite> や <cite>Vim</cite>
の機能をフル活用して複雑な記述をしている場合は誤認する可能性がありますが、
そんなことはほとんど起こらないだろうと割り切っているのでしょう。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li>
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> 
<cite xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PEP 263</anchor> -- Defining Python Source Code Encodings | Python.org</cite>
(<time>2017-02-22 15:05:56 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.python.org/dev/peps/pep-0263/">https://www.python.org/dev/peps/pep-0263/</anchor-external></li></ul></refs></section><section><h1>関連</h1><p><sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>Emacsにおける文字コード</anchor> </sw-see></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <code>vim:</code> も参照。</p></section><section><h1>メモ</h1><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <cite xml:lang="en">PEP 263 -- Defining Python Source Code Encodings | Python.org</cite>
(<time>2017-02-22 15:06:02 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.python.org/dev/peps/pep-0263/">https://www.python.org/dev/peps/pep-0263/</anchor-external><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> 移転確認 <time>2025-11-03T15:35:52.800Z</time></li><li>
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 
<cite xml:lang="en">PEP 263 – Defining Python Source Code Encodings | peps.python.org</cite>, <time>2025-05-17T08:38:59.000Z</time>, <time>2025-05-19T08:42:59.557Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://peps.python.org/pep-0263/">https://peps.python.org/pep-0263/</anchor-external></li></ul></li></ul></section></body></html>