
Ubuntu日本語フォーラム

ログインしていません。
nedziです。Ubuntu 10.04 LTS を使用しているのですが、文字コードの確認方法が分かりません。
具体的にはコンソール上で以下のような方法を試してみました。
(1)
nedzi@bluebird:~/program/ruby/enjoy_ruby$ nkf -g list18_01.rb
ASCII
nedzi@bluebird:~/program/ruby/enjoy_ruby$ kcc -c list18_01.rb
list18_01.rb: ASCII
list18_01.rb は UTF-8 でコーディングされているはずです。
(私のマシンで作成したので)、私が求めているのは以下のような
返り値?です(人手で編集しました)。
(2)
nedzi@bluebird:~/program/ruby/enjoy_ruby$ nkf -g list18_01.rb
UTF-8(LF)
nedzi@bluebird:~/program/ruby/enjoy_ruby$ kcc -c list18_01.rb
list18_01.rb: UTF-8(LF)
nkf, または kcc 以外のコマンドでもよいので、文字コード(できれば、改行コードも)
を確認するコマンドはないでしょうか?詳しく知っておられる方が居られましたら、
ご教示おねがいします。
p.s. Vine Linux 5.1 では、この方法で確認できました。
オフライン
こんばんは。
http://itpro.nikkeibp.co.jp/article/COL … 08/231958/
という意味でしょうか。それとも1文字ずつHEXコードを出力させるのですか。標準出力をファイルではなく、スクリーンにすれば可能では。
文字の変換でしたら、『nkf』ならhttp://it.kndb.jp/entry/show/id/744
『iconv』なら、http://www.ysd.bne.jp/linux/strcode.html
改行コードを含めてという話は、Unix系は「LF」($0A)、Windowsは「CR・LF」($0D0A)、Macは「CR」($0D)と決まっています。
それと、ASCII(1バイト7ビットコード)の部分はすべてのコード体系で共通です。
他の改行コードを別な改行コードにするときには、高機能なテキストエディターならできます。
期待したリアクションでないときにはごめんなさい。
オフライン
ごめんなさい。
1文字ずつHEXコードを出力させる
×標準出力をファイルではなく、スクリーンにすれば可能では。
○簡単ではないようです。http://homepage1.nifty.com/~tetsu/ruby/cmd/hd.htmlを参考に。
オフライン
nedzi による投稿:
具体的にはコンソール上で以下のような方法を試してみました。
(1)
nedzi@bluebird:~/program/ruby/enjoy_ruby$ nkf -g list18_01.rb
ASCII
nedzi@bluebird:~/program/ruby/enjoy_ruby$ kcc -c list18_01.rb
list18_01.rb: ASCII
list18_01.rb は UTF-8 でコーディングされているはずです。
(私のマシンで作成したので)、私が求めているのは以下のような
返り値?です(人手で編集しました)。
UTF-8は半角英数字のみであればASCIIと区別が付かなかったと記憶していますが、list18_01.rbというファイルには日本語などのマルチバイトな文字が含まれていますでしょうか。
自分の環境でUTF-8(日本語)なファイルに対し、いくつかコマンドを試してみたところ、
$ file alsa.wiki alsa.wiki: UTF-8 Unicode English text, with very long lines $ nkf -g alsa.wiki UTF-8
のようになりました。
また、「日本語」とだけ書いた短いUTF-8(日本語)なファイル、test.txtに対しては、
$ file test.txt test.txt: UTF-8 Unicode text $ nkf -g test.txt UTF-8
文字コードの自動判別は大変難しいものであるらしい(特にEUCとか)ので、ちょっと凝ったことをするのであれば、具体的にやりたいこと、その方法に対する制限事項などを投稿いただいた方が、適切な回答がつきやすくなるかと思います。
単純に文字コードの判別という意味では、emacsなどのエディタに読み込ませれば、ほぼ正確に認識してくれます。
# 頑張ればelispで判別結果だけを表示するようスクリプト化できるかも知れませんが、elispについて全く知識が無いので
# 具体的な方法は判りませんです。。
オフライン
hmatsueさんと同様、日本語を含むファイルでは $ nkf -g で「UTF-8」と表示されました。ASCII文字のみだと、「ASCII」という表示になりますね。
改行コードを調べるにはodコマンドの-cオプションを使うとわかりやすいです。
$ od -c ファイル名 | less
odコマンドの-cオプションでは「ASCII文字かバックスラッシュ付きのエスケープ文字」という形式で出力します。
これを使うと、改行コードの部分がLF(UNIX系)なら\n、CR(Mac)なら\r、CR+LF(Win)なら\r\nと表示されます。
ちなみに、FedoraでもVineと同様に、日本語を含むファイルなら $ nkf -g で「UTF-8 (LF)」と改行コード形式を含む形で表示されました。
オフライン
nedziです。皆様ありがとうございます。 list18_01.rb の中身にはマルチバイト文字は
入っておりません。ASCIIコード文字のみです。私が教えていただきたいことは、具体的に書くと
「ファイル(ASCIIコードのみ)の文字コード(と、できれば改行コードも)を、UTF-8, EUC, Shift-JIS、etc...
のうちどれであるかを判別するコマンド、またはその方法」
です。やはり、マルチバイト文字(日本語)を含んだファイルでないと、ASCIIとの区別はつかないのでしょうか?
オフライン
改行コードについてはエディタで開いて自動認識結果をみるとかvine_userさんが書かれた方法などでいかがでしょう。
文字コードについてはASCII文字しか使っていないのであれば原理上ASCIIとしか認識できません。
というか、差が無いようにコードが設計されています。
適当な短い内容のファイルを作ってHEXダンプしてみるとマルチバイト文字がどのように扱われているか分かるかと思います。
オフライン
ファイル内容をもとに判断するしかないので、それで区別が付かないものは、どーやっても判別できません。また、判別が確実である保証もありませんから、できるかぎり、自動認識に頼らない(必要ない)ように設計なり設定する必要があります(これが大前提です。)。もし、自動認識に頼るなら、間違えても問題にならない用法に限定する(人間が見て気が付いた時に直せば済む とか)必要があることになります。
# 方法が無い為に不可能なことは、人間でもコンピュータでも不可能なことは変わらないです。面倒とか手間が掛かりすぎる複雑過ぎるという意味で用いる不可能なことは、コンピュータで行うことが可能です。
p.s. Vine Linux 5.1 では、この方法で確認できました。
UTF-8(やUTF-16)の場合、BOTというファイルの先頭に2バイトのマーカ(BOM)が付いていれば判別可能です。おそらく、Vineの環境で使用したテキストエディッタは、これを付加しているのではないでしょうか?(つまり、判定しているファイルにしるしがあるから判る)。が、BOMが存在することで正しく処理できない可能性もあるため、お勧めしません(そのファイルを使用するアプリケーションが「読み飛ばしてくれる」作りになっている必要が必要があります)。また、このルールはUTFのものなので、他の判断には使えません。
自動認識では判断しきれない可能性が有るからこそ、Pythonのendocing句とか、htmlのmetaタグのように、ファイル自身に文字コードを明記する方法があるわけです。
オフライン
nedziです。皆様ありがとうございます。しばらく考えたら、自分がとてもバカな質問をしていることに気がつきました。
皆様のおっしゃられる通り、日本語文字使用しない限りは、ASCIIとUTF-8, EUCなどの区別はできない、(必要ない)
のですね。お騒がせしてすみませんでした。また、丁寧に回答していただき非常に感謝しています。ありがとうございました。
オフライン
あぁ。。BOMのことをすっかり忘れてしまっていました。ご教示多謝です。> weykさん
これだけではなんなので。
emacs(やPython)な方言では先頭に
-*- coding:utf-8 -*-
と書いておく、なんていうのもありましたね。
他のエディタなどでも似たような機能を持つものもあるかも。
どの程度意味があるかは別ですが。。
オフライン