SJISテキストを使うメリットとは

Linuxを触っていると何気なくUTF8を当然のように使っていますが、日本語でWindowsを使うときはSJISが一般的です。 何故UTF8なのでしょうか。一般的なSJISではダメなのでしょうか。 両者を比べてみましょう。

~$ echo -n あいうえお > utf8
~$ echo -n あいうえお | nkf -s > sjis
~$ ls -l utf8 sjis
-rw-r--r-- 1 takk takk 10  6月  5 11:59 sjis
-rw-r--r-- 1 takk takk 15  6月  5 11:59 utf8
~$ 

全角の5文字のテキストですが、SJISなら10Byte、UTF8は15Byte、SJISの方がサイズが小さくなり分があります。

それぞれを圧縮したらどうなるでしょうか。まずは実験するための五十音テキストを作成。

~$ ruby -e 'puts ("あ".."ん").to_a' | pr -t10J | expand -t1
あ か ご ぜ つ ぬ ぴ ぼ や れ
ぃ が さ そ づ ね ふ ぽ ゅ ろ
い き ざ ぞ て の ぶ ま ゆ ゎ
ぅ ぎ し た で は ぷ み ょ わ
う く じ だ と ば へ む よ ゐ
ぇ ぐ す ち ど ぱ べ め ら ゑ
え け ず ぢ な ひ ぺ も り を
ぉ げ せ っ に び ほ ゃ る ん
お こ
~$ 

上記のコマンドで作成した五十音テキストをUTF8としてutf8.txtに保存、そして、SJISとしてsjis.txtに保存します。

~$ !!>utf8.txt
ruby -e 'puts ("あ".."ん").to_a' | pr -t10J | expand -t1>utf8.txt
~$ nkf -s < utf8.txt > sjis.txt
~$ nkf --guess *.txt
sjis.txt: Shift_JIS (LF)
utf8.txt: UTF-8 (LF)
~$ 

非圧縮前のサイズを確認します。当然SJISの方が小さいです。

~$ ls -l *.txt
-rw-r--r-- 1 mako mako 246  6月  5 14:39 sjis.txt
-rw-r--r-- 1 mako mako 328  6月  5 14:38 utf8.txt
~$ 

では圧縮してみます。bzip2にします。

~$ bzip2 {sjis,utf8}.txt
~$ ls -l *.bz2
-rw-r--r-- 1 mako mako 164  6月  5 14:39 sjis.txt.bz2
-rw-r--r-- 1 mako mako 163  6月  5 14:38 utf8.txt.bz2
~$ 

あれれ、UTF8のファイルの方が短くなっています。
五十音の並びでたまたまそうなったのでしょうか。再度シャッフルしたファイルでbzip2圧縮してみます。

~$ ruby -e 'puts ("あ".."ん").to_a' | shuf | pr -t10J | expand -t1
ぜ ぐ ん ぼ な ぞ ふ う て じ
ぴ べ ご さ び ひ そ や ぅ ぷ
の ゃ わ は ょ ほ あ ゐ み ぉ
か ゅ と ま ゆ た に こ ぇ ぶ
ね つ を い る す が ば ゑ く
ず ぽ っ ど ら り へ ぱ ろ ぺ
ぢ で し ざ ぃ き め む ぬ よ
づ せ け げ ゎ ぎ お ち も れ
だ え
~$ ruby -e 'puts ("あ".."ん").to_a' | shuf | pr -t10J | expand -t1 > utf8.txt
~$ nkf -s < utf8.txt > sjis.txt
~$ bzip2 {utf8,sjis}.txt
~$ ls -l *.bz2
-rw-r--r-- 1 takk takk 168  6月  5 14:53 sjis.txt.bz2
-rw-r--r-- 1 takk takk 177  6月  5 14:53 utf8.txt.bz2
~$ 

11ByteほどSJISの方が小さくなりました。SJISの方が元ファイルのサイズが小さいですので、より小さくなるはずなのですが、差が小さくてよくわかりません。小説を使って比較したいと思います。
青空文庫から、太宰治の人間失格を使います。

~$ wget http://www.aozora.gr.jp/cards/000035/files/301_ruby_5915.zip
~$ ls -l
合計 68
-rw-r--r-- 1 takk takk 68596  1月 10  2011 301_ruby_5915.zip
~$

元々のファイルがzipなので、zipどうしで比較してみましょう。

~$ mv ningen_shikkaku.txt old.txt
~$ nkf -w < !$ > !^
nkf -w < old.txt > ningen_shikkaku.txt
~$ sed -n 40p < ningen_shikkaku.txt
 自分は子供の頃から病弱で、よく寝込みましたが、寝ながら、敷布、枕のカヴァ、掛蒲
団のカヴァを、つくづく、つまらない装飾だと思い、それが案外に実用品だった事を、二
十歳ちかくになってわかって、人間のつましさに暗然とし、悲しい思いをしました。
takk@deb83:~/sjis$ 

~$ zip utf8.zip ningen_shikkaku.txt 
  adding: ningen_shikkaku.txt (deflated 66%)
~$ ls -l
合計 520
-rw-r--r-- 1 takk takk  68596  1月 10  2011 301_ruby_5915.zip
-rw-r--r-- 1 takk takk 229000  6月  5 16:22 ningen_shikkaku.txt
-rw-r--r-- 1 takk takk 153317  1月  9  2011 old.txt
-rw-r--r-- 1 takk takk  77344  6月  5 16:29 utf8.zip
~$ 

元ファイルはSJISテキストのzip圧縮で68595Byte、UTF8に変換したテキストは77344BYte、やはりSJISファイルの方が小さくなりました。元ファイル自体が小さいので、当然ですね。
bzip2圧縮で確認してみましょう。不要ファイルは削除して最初から。

~$ unzip 301_ruby_5915.zip      
~$ ls
301_ruby_5915.zip  ningen_shikkaku.txt
~$ nkf -w ningen_shikkaku.txt > utf8.txt
~$ mv ningen_shikkaku.txt sjis.txt
~ ls -l
合計 444
-rw-r--r-- 1 takk takk  68596  1月 10  2011 301_ruby_5915.zip
-rw-r--r-- 1 takk takk 153317  1月  9  2011 sjis.txt
-rw-r--r-- 1 takk takk 229000  6月  5 17:13 utf8.txt
~$ bzip2 *.txt
~$ ls -l
合計 180
-rw-r--r-- 1 takk takk 68596  1月 10  2011 301_ruby_5915.zip
-rw-r--r-- 1 takk takk 55280  1月  9  2011 sjis.txt.bz2
-rw-r--r-- 1 takk takk 56476  6月  5 17:13 utf8.txt.bz2
~$      

サイズ差が小さくなりましたが、SJISの方が小さいことに変わりはありません。

2 responses to “SJISテキストを使うメリットとは

  1. Write extra, thats all I’ve to say. Actually, it appears as though you relied on the video to make your point. You clearly know what youre talking about, why throw away your inletligence on just posting movies to your site when you may be giving us something informative to read?

    • Great issues alogtether, you just received a new reader. What may you recommend in regards to your put up that you made some days in the past? Any certain?

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA