日本語テキストと文字コード

26.3. 日本語テキストと文字コード

日本語テキストファイルを表示してみましょう。

準備 #

例題のデータをダウンロードして,Colab で展開します.

先に Colab のノートブックを開きます HWB-iconv.ipynb

最初のセルを実行します 長い出力がありますが,詳細の紹介は割愛します.
apt install tree unar nkf
...

例題のデータをダウンロードします.
japanese-text.zip

左のサイドバーから ファイルブラウザ folder を開いて,右クリックからアップロードします

展開します.まず,画面 下端 のツールバーからターミナル terminal を起動します.

開いたターミナルで unzip コマンドを使います.

unzip j までタイプして タブキー keyboard_tab を押すと,補完されて,ファイル名の最後まで入力されます.
unzip japanese-text.zip
Archive:  japanese-text.zip
   creating: japanese-text/
  inflating: japanese-text/japanese-euc.txt  
  inflating: japanese-text/japanese-jis.txt  
  inflating: japanese-text/japanese-utf8.txt  
  inflating: japanese-text/japanese-sjis.txt 

tree コマンドで確認すると, 4つのファイルがあります.

今回も,tree j までタイプしたら,タブキー keyboard_tab で補完しましょう.

tree japanese-text
japanese-text
├── japanese-euc.txt
├── japanese-jis.txt
├── japanese-sjis.txt
└── japanese-utf8.txt

utf8 #

ファイルブラウザから,japanese-utf8.txt を読んで見ましょう.

後で試しますが,他のファイルは文字化けします. utf8 を目印にファイルを正しく特定してください.

ターミナルから cat コマンドでも読んで見ましょう. cat パス は指定されたパスがテキストファイルだと信じて内容をターミナルに表示します。

補完を使って入力しましょう,cat j のあと,cat japanese-text/j のあと,cat japanese-text/japanese-u のあと,と3回使うと良いです.
cat japanese-text/japanese-utf8.txt
21世紀に入り、人類は、国家を超えた地球大の交わりが飛躍的に強まる時代を
迎えている。

日本もまた...

ターミナルのプロンプトで cat (空白文字含む) までタイプしたあとで japanese-2 のアイコンをターミナルまでドラッグアンドドロップします。

文字コード変換 #

つづいて japanese-jis.txt を表示しましょう.ファイルブラウザで開いても,ターミナルでcat で表示しても,文字化けします。

cat japanese-text/japanese-jis.txt
21@$5*$KF~$j!"?MN`$O!"9q2H$rD6$($?CO5eBg$N8r$o$j$,HtLvE*$K6/$^$k;~Be$r
7^$($F$$$k!#

F|K\$b$^$?!"@$3&$K<+$i$r3+$-$D$D!"$=$NFC<A$rH/4x$7$F?MN`J8L@$K9W8%$9$k
...

これはターミナルが utf-8 を期待しているのにファイルの内容が別の文字コードを使っているためです。 文字コードを変換しましょう。

nkf コマンド #

nkf は 日本語の変換で便利なコマンドです. nkf -w filepath のように -w オプションとファイルのパスを指定すると, utf-8 に変換して読むことができます。

nkf -w japanese-text/japanese-jis.txt
21世紀に入り、人類は、...

他のファイル,japanese-euc.txtjapanese-sjis.txt も同様に読んで見ましょう.

nkf はフリーソフトウェアで homebrew などからインストールできます。
iconv

iconv コマンド #

iconv コマンドは同様に変換機能を持ちますが、 より多くの言語やコードの変換ができる代わりに、ユーザが変換元のエンコーディングを指定する必要があります。 つまり文字エンコーディングが分からないファイルには使えません。

EUC-JP で書かれたファイルを UTF-8 で表示するには以下のように行います。

iconv -f EUC-JP -t UTF-8 japanese-text/japanese-euc.txt
21世紀に入り、人類は、国家を超えた地球大の交わりが飛躍的に強まる時代を
...

コードとファイルサイズ #

4つのテキストファイルは,異なる文字コードを使っていますが,内容は同じ文章でした.

それぞれの,ファイルサイズを調べてみましょう.ls -l folder とするとフォルダ内のファイルの詳細が表示されます. 読みにくいですが,中央付近の数 (783, 855 など) がファイルサイズです.

ls -l japanese-text
total 16
-rw-r--r-- 1 root root  783 Apr  5 01:44 japanese-euc.txt
-rw-r--r-- 1 root root  855 Apr  5 02:38 japanese-jis.txt
-rw-r--r-- 1 root root  783 Apr  5 01:44 japanese-sijis.txt
-rw-r--r-- 1 root root 1166 Apr  5 01:43 japanese-utf8.txt
表示の詳細
右端から,ファイル名,Apr: 01:44 などの更新日時 (ただし9時間時差があります), 中央付近の 2つのroot は colab でのユーザ名とグループ名 (ファイルシステムのルートではなく,管理権限を木構造であらわしたときにすべての権限をもつもの=管理者という意味です) と並んでいます.残りの説明は今は割愛します.

ここまでをまとめると表のようになります.

ファイルサイズeucjissjisutf8
オリジナル7838557831166
zip後

日本語の文字1字あたり,utf8 では概ね 3バイト,他は2バイトで表現します.ファイルサイズと概ね一致していますね.

つづいて,4つのファイルを別々に zip で圧縮して,結果を比較しましょう zip のコマンドは,zip 出力ファイル名 圧縮対象 です.

japanese-text/japanese-euc.jpeuc.zip に圧縮してみます.

zip euc.zip japanese-text/japanese-euc.txt
adding: japanese-text/japanese-euc.txt (deflated 33%)

ファイルの大きさを調べるには,ls -l ファイルパス とします

ls -l euc.zip
-rw-r--r-- 1 root root 737 Apr  5 02:53 euc.zip

今回は,元のファイルサイズとあまり変わりませんでした.
他はどうでしょうか? 調べて表を埋めてみましょう.

ファイルサイズeucjissjisutf8
オリジナル7838557831166
zip後737
実は1つのファイルだけはっきり減ります.どのように考えれば良いでしょうか.

演習 #

演習のデータをダウンロードします. japanese-text2.zip

zip ファイルの中には複数のテキストファイルがあり,どれも有名な小説の一節です. それぞれのファイルを呼んで,対応する小説のタイトルを当ててください.

ファイル・フォルダとパス previous page 26.3. 日本語テキストと文字コード next page 平均情報量
このサイトは開発版の はいぱーワークブック です.