読者です 読者をやめる 読者になる 読者になる

私が歌川です

@utgwkk が書いている

2ちゃんねるのトリップを Unicode の時代に実装する

技術

tl;dr

  • Shift-JIS が混ざるとつらい
  • こういうところは Python2 のほうがよかった……

トリップとは

トリップとは,2ちゃんねるなどの匿名掲示板において個人を簡単に証明するための合言葉,またその機能によって表示される文字列のことを指します*1

トリップを実装する

Wikipedia にトリップの Perl 実装があるので,これをよしなに書き換えてやれば他言語でも実装できると思ってしまいますが,ここで一つの問題が生じます.

我々の生きている現代は,Unicode の時代です.人々は Unicode で文字列情報を送り,Unicode によって意思疎通を送っています. 2ちゃんねるなどの匿名掲示板ができた時代は,まだ Shift-JIS を用いていました.「2バイト文字」という言い回しが通用する時代でした.

現代では,一般的な文字列データは Unicode であり,Shift-JIS はイレギュラーとされています[要出典]. 例を上げると,Python3 の文字列は Unicode で,他の文字コードを扱うにはバイナリ文字列を経由しなければなりません. 一方で,匿名掲示板ができた時代では,文字列とバイナリ文字列との間の差はあまりなく[要出典],全て文字列として扱うことができました.

そして,できた実装がこちらです.

Generate tripcode

このコードは, Shift-JISで保存して,Python2で実行すると,doctest が走ります. generate_trip は (Python2 の文字列) -> unicode の関数です.

crypt() に渡せるのは,str 型の文字列です. これは,Python2 では実質バイト列でしたが,Python3 では Unicode 文字列に限定されています. Shift-JIS を維持しつつ文字列を渡すのが困難だったためこのような形になりました.許してほしい…….

結論

早く Unicode に移行してほしい