2007/07/29

文字コード調査(テキトー)

Debian GNU/Linuxの文字コードがUTF-8のようですので、勉強のためにうちのシステムの文字コードについて調べてみました。

よく分からずにテキトーにやってます。

以下の記述は私のテキトーな調査を基に記述しています。
けっして信じないでください。


日本語名のフォルダを作成してみます。
以下のフォルダ作成は、Vine Linux 4.1のGNOMEターミナルエディタからDebian GNU/Linux 4.0にtelnet接続して行いました。
$ mkdir UTFです      <-- GNOMEターミナルをUTF8に設定し、
フォルダ"UTFです"を作成

$ mkdir EUC鐃叔わ申 <-- GNOMEターミナルをEUC-JPに設定し、
フォルダ"EUCです"を作成
(入力中に文字化けします)

$ ls <-- GNOMEターミナルをEUC-JPに設定
(日本語名のフォルダは全て文字化けしてしまいます)
??能?? Comic_etc EUC?任? Game HONDA KOUSHIEN TV_Cinema
UTF�с™ WallPaper WallPaper2 Web

$ ls <-- GNOMEターミナルをUTF8に設定
(UTF-8の日本語名のフォルダだけ正常に表示されます)
??ǽ?? Comic_etc EUC?Ǥ? Game HONDA KOUSHIEN TV_Cinema
UTFです WallPaper WallPaper2 Web

ここまででフォルダなどを作成したところをVine Linux 4.1のKonquerorで参照したのが下記です。
Vine Linux 4.1の文字コードはEUC-JPです。

日本語のフォルダ名がついているのは下記の3つです。
芸能人・・・Debian GNU/Linux (UTF-8の環境)に変更する以前から作成してあったフォルダ名EUC-JPのフォルダ

UTFです・・・上でGNOMEターミナルをUTF-8に設定した後に作成したフォルダ(化けてます)

EUCです・・・上でGNOMEターミナルをEUC-JPに設定した後に作成したフォルダ

GNOMEターミナルをUTF-8にして入力したフォルダ名はUTF-8で、GNOMEターミナルをEUC-JPにして入力したフォルダ名はEUC-JPで保存されていると思われます。


自分で作ったファイル名/フォルダ名の文字コードを調べるスクリプト(信頼性0)で調べると次のようになりました。
��ǽ�� (Directory)->
EUC-JP <-- 狙い通り!
Comic_etc (Directory)->
ASCII
EUC�Ǥ� (Directory)->
EUC-JP <-- 狙い通り!
Game (Directory)->
ASCII
HONDA (Directory)->
ASCII
KOUSHIEN (Directory)->
ASCII
TV_Cinema (Directory)->
ASCII
UTFです (Directory)->
UTF-8 <-- 狙い通り!
WallPaper (Directory)->
ASCII
WallPaper2 (Directory)->
ASCII
Web (Directory)->
ASCII


一応私の意図通りになっているようです。
(フォルダ名のエンコードもスクリプトの動作も)
繰り返しますが、信頼性0です。

ちなみにスクリプトの中身はこうです。
信頼性0です。
私はシェルスクリプトなんて作ったことろくにありません。
よく分かりません。
(というか、誰か教えて・・・)

中でnkfを--guessオプションをつけて使用しています。
おそらくnkf 2.0.4以降が必要だと思います。
#!/bin/sh

error_flag=1 # Initial valuable (ERROR)

for name in *; do
if [ -L "$name" ];then
# Symbolic link
type="Symbolic link"
error_flag=1
elif [ -d "$name" ]; then
# directory
type="Directory"
error_flag=0 # success
elif [ -f "$name" ]; then
# file
type="File"
error_flag=0 # success
else
# unknown
type="Unknown type"
error_flag=1 # error
fi

if [ $error_flag = 0 ]; then
echo "$name ($type)->"
echo -n " "
echo -n "$name" | nkf -guess
else
echo "$name ($type)"
fi
done

exit 0

0 件のコメント: