キリル文字の文字コード変換

2018年6月21日

この夏、人生2回目のロシア渡航を目論んでいて、色々と調査した内容を2018年夏版、極東ロシア渡航情報メモとしてまとめています。

その中でSASCOというロシアの船会社のサイトをスクレイピングしてデータを表示している部分があるんですが、普通にcurlでデータを引っ張ってきても文字化けしてしまうので、ちょっと調べてみました。

Windows-1251という文字コード

こんな感じ。

SASCO運航情報

結論から言うとUTF-8じゃないからです。ヘッダに文字コードが指定してある。

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

「windows 文字コード キリル文字」で検索するとPolitical Criminologyというサイトがあって、そこに書いてありました。日本語で言うところのシフトJIS(CP932)のロシア語版ですね。

iconvで変換する

いつも使っているnkfはNetwork Kanji Filterというだけあって日本語まわりのコード変換しかサポートしていないので、今回はiconvを使います。

iconvは-f(Fromだね)で入力側の文字コード、-t(Toだね)で出力側の文字コードを指定します。フィルタとしても振る舞うのでリダイレクトで流し込んでもいいんですが、引数でファイル名を与えると対象ファイルを読み込みます。

出力は標準出力のみなので、保存したいときはリダイレクトする必要があります。というわけでcurlで取り込んだファイルを変換。

iconv -f CP1251 -t UTF-8 source.file > destination.file

これまでは英語版のページをスクレイピングして、地名や船名をsedでロシア語に置換していましたが(する必要ないけど)、これで余分な処理を省略することができました!

-  head -n $END $SOURCE | tail -n `echo "${END}-${START}+1" | bc` | sed 's/"timetable"/"table"/' \
-    | sed 's/Vanino/<span class="ru">Ванино<\/span>/' | sed 's/Kholmsk/<span class="ru">Холмск<\/span>/' \
-    | sed 's/SAKHALIN\(-..\)/<span class="ru">Сахалин\1<\/span>/' > $DISTINATION
+  head -n $END $SOURCE | tail -n `echo "${END}-${START}+1" | bc` | sed 's/"timetable"/"table ru"/' > $DISTINATION

SASCOの貨客船に乗ってみたい

昔は新潟あたりからも沿海州へ渡る貨客船があったらしいんですが、今ロシアへ渡る船は鳥取から韓国を経由してウラジオストクへ入るフェリーしかない。

稚内からサハリンへ渡る船も第三セクター化して細々と続いていたのに2018年は運行が断念されたし。。。

てか貨客船ってのに乗ってみたいんだー!!!

いつか乗る。(ΦωΦ)