漢字コードと正規表現

サクラエディタで漢字コードを調べてみたら、不思議なことが分かった。

Windowsで使うテキストエディタなので、文字コードはShift-JISである。青空文庫から芥川龍之介の『リチヤアド・バアトン訳「一千一夜物語」に就いて』を例にとって、その不思議について説明する。

Shift-JISの全角文字で漢字の最初の文字は「亜」(889f)となっている。最後の漢字は「熙」(EAA4)なので、正規表現でShift-JISの漢字を網羅するには [亜-熙] でいいことになる。

確かに、秀丸で [亜-熙] として検索すると、漢字を全部見つけてくる。

しかし、サクラエディタで同じ検索条件で検索すると、

このように、歯抜けだらけになる。そこで、Shift-JISとUTF-8のコードを併記しているリストを見つけたので、少し加工してエクセルに取り込みUTF-8のコードでソートをかけてみた。

最初の漢字が「一」(E4B880)で、最後の漢字が「龠」(E9BEA0)なので [一-龠] として検索してみた。

とすると、秀丸のShift-JISのコードで検索したのとまったく同じになった。

実は、awkの正規表現がサクラエディタと同じだったので、漢字の扱いで説明がつかないことになってしまった。昨日から色々調べてみたが「なるほど」という答えは得られなかった。ChatGPTが検索エンジンに「unicode」のコード表が使われているのではないかのような答えがあったが、すっきりとはしなかった。

{
  gsub(/[^一-龠]+/,””);
  print;
}

「^」を付けているのは、[一-龠] 以外はすべて消去させるということ。で、結果は、

となり、これでなんとか漢字コードをサクラエディタでもawkでも扱えそうになってきた。

しかし、秀丸で [一-龠] の置換で該当する漢字を消去させると、「為(88d7)」「或(88bd)」「亜(889f)」「愛(88a4)」「易(88d5)」「医(88e3)」「謂(88e0)」「遺(88e2)」「異(88d9)」などが残っている。

それは「亜(889f)」から「磯(88e9)」までが除外されているからである。

ということで秀丸の席表現で漢字を対象にするならば [一-龠|亜-磯] とすれば、とりあえずは事なきを得ることが分かった。