List of class taught by takasu thermodynamics nihongo code kaisetsu

日本語のコードについて

        by 高須    97.8.8  
    ホームページ  コンピュータ・メモの目次

はじめに

最近、Webの検索語の統計をとる perlスクリプトを書いている途中で、
日本語の変換をいろいろしてみました。
日本語をコンピュータで表現するのは、いろいろ難しいようです。

それから、パソコンを使い始めた知合いに、
「JIS, SJIS, EUCから選べ、とあるけど、どれに設定したらいいの?
JISとかSJISって、なあに?」とよく聞かれるので、
ついでにまとめておきます。

といっても、あまりわかりやすい説明になってないかもしれません。
詳しく知りたい方は参考文献を見て下さい。


1。JIS、SJIS、 EUCとは

日本語の文字をコンピュータ内で表すには、
ビット(0か1)で表現します。
その表現のしかたに歴史的に何通りかあり、
JIS, SJIS(shift-jis), EUCなどがあります。

マックなどのパソコンはたいていSJISを使っています。
EUC (extended unix codeの略。AT&T JISともいう)は
UNIX ワークステーションの内部表現に使われてます。

メールはJISで送ることが多いです。
大抵のメーラーで、
JISで送るように標準設定されているはずです。

やっかいなのが「半角カナ」です。

半角カナというのは、
全角Aの半分の大きさAのカナのことです。
半角カナそのものをここに書くと読めないので書いてません。

niftyでは、半角カナを使うことがよくあります。
でも、インターネットのメールで半角カナが入っていると、
メールのそれ以降が読めなくなったり、
場合によっては、メーラが動かなくなります。
半角カナはメールに書かない方が安全です。

半角カナには主に、SJISの半角カナと、EUCの半角カナがあります。

以上のような、「日本語の文字→01の記号」という変換は、
やり方さえ決めればできます。

逆の「01の記号→日本語の文字」は、やり方(EUCとかSJISとか)が
わかっていればできますが、ただ01の記号を与えられただけでは、
何通りかの可能性が出てきてしまいます。


2。変換の例

自分のホームページへのアクセスを見ていると、
検索語に次のようなものがありました。
jcode.plのjconvを使っただけでは、うまく変換できません。


1) %8E%D3%8E%CA%8E%DE%8E%B2%8E%D9%8E%B7%8E%DE%8E%B1
       「モバイルギア」EUC圧縮方式 半角カナ

2) %CA%AF%B6%B0
       「ハッカー」SJIS、半角カナ
赤で書いてあるのは、いろいろやってみて、わかったことです。
この記号を試しに、jcode.plの、getcodeを使って、jis, sjis, eucの方式を
出力してみました。

      $word =~ s/%(..)/pack("c", hex($1))/ge; 
      $code = &jcode'getcode(*word);
すると、1)はsjis, 2)はeucという結果になり、 正しい答は得られません。

これはどうしてかというと、getcodeでは、
文字が全角であると仮定しているからです。
なぜ半角の判定ができないかというと、sjisの全角とeucの半角カナ、
sjisの半角カナとeucの全角の、
コンピュータ内部での表現が重なっているためです。

試しに、


   &jcode'convert(*word, "jis")
を用いて、(全角と解釈して)JISに変換すると次のようになります。

    1)謝写酌軸勺執酌竺
2)墳彊

人間がこれを見た場合、「これは変だ。半角カナかもしれない」と思って、
&jcode'h2z_euc (EUC入力を仮定して半角カナを全角に変換)や
&jcode'h2z_sjis( SJIS入力を仮定して、半角カナを全角に変換)を用いて、
うまく単語が出てきたら、成功です。

でも、コンピュータに「任意のコードを、JISの全角の文字に
正しく変換」させることは難しいです。


3。半角カナの内部表現

EUCの半角カタカナは、参考文献[1]によると、16進数で、

   第1バイト 8E
第2バイト A1-DF
なので、1つおきに、8Eが並んでいれば、EUC半角カタカナの可能性が
高いです。

一方、SJISの半角カタカナは、


   A1-DF
の1バイトで表しているので、全然判定できないです。

4。半角→全角の変換ソフト

日本語の半角→全角変換のできるソフトは、
私が知っている範囲で次のようなものがあります。
どれも事情は同様で、半角→全角の変換は、
sjisやeucの指定がないとできないようです。

   ・jcode.pl           (K. Utashiro氏による)
・jconv.c, jcode.c ([1]の著者のLunde氏による)
・nkf

参考文献

[1}「日本語情報処理」 K. Lunde著、春遍雀来、鈴木武生 訳。ソフトバンク社。
4800円、ISBN 4-89052-708-7