• ベストアンサー

Linux nkfコマンド使用方法

最近、nkfコマンドを知りました。 nkf -w8 --overwrite test.php nkf -g test.php >>UTF-8 上記は、意図したとおりに変換されますが、 -jesなどの他の文字コード変換ができません。 なぜでしょうか。 バージョン2.1.2 ご回答をよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#223623
noname#223623
回答No.2

> -jesなどの他の文字コード変換ができません。 > なぜでしょうか。 理由はわからないけど、試しに  $ nkf -g test.php  # 結果1  $ nkf -j test.php > test.php.j  $ nkf -g test.php.j  # 結果2 を実行して、結果1 と 結果2 がどうなったか補足してみたらどうかな。-e, -s も同様に。

toyoucook
質問者

お礼

マルチバイト文字(日本語)を含んでいないファイルをSJIS、EUCに変換しようとしていました。変換できないではなくて、強制的にASCII になっていた模様です。 日本語を含んだ状態で、変換したところうまくいきました。^^;当たり前ですね お二方ともありがとうございました。

toyoucook
質問者

補足

回答ありがとうございます。 色々やってみることにします。

その他の回答 (2)

noname#223623
noname#223623
回答No.3

#2 です。補足をもらう前だけど勘で追加投稿。  $ nkf -g test.php  # 結果1  $ nkf -j test.php > test.php.j  $ nkf -g test.php.j  # 結果2 とやった場合、結果1は ASCII になるんじゃないかな。だとすると日本語が含まれてないので nkf -j(e,s) を実行した後(結果2)もやはり ASCII になる。 では、なぜ -w8 のときに結果2 が UTF-8 になるかというと、元の内容に BOM が付加されてるから。元の内容に日本語が含まれてなくても、BOM があるので UTF-8 と判定されてるってことですね。 ちなみに -w80 だと BOM が付かないので、結果2 はやはり ASCII になりますね。  $ cat aaa  abcde  $ nkf -g aaa  ASCII  $ nkf -w8 aaa > aaa.w8  $ nkf -g aaa.w8  UTF-8  $ nkf -w80 aaa > aaa.w80  $ nkf -g aaa.w80  ASCII (ここまで書いて質問を確認したら補足きてました。が、そのまま送ります)

toyoucook
質問者

お礼

ご回答ありがとうございました!

  • localica
  • ベストアンサー率52% (202/385)
回答No.1

jesって何ですか? >なぜでしょうか。 マニュアルを確認されましたか? jisに変換したいならオプションは「j」、sjisに変換したいなら「s」です。 変換出来ない文字コードも存在します。 http://sourceforge.jp/projects/nkf/howto/usage

toyoucook
質問者

お礼

初歩的な間違いでした。 ありがとうございました。

toyoucook
質問者

補足

回答ありがとうございます 分かりづらくて申し訳ありません オプションのことでした。 -j -e -s utf-8には変換できるのですが、それ以外の変換が行えません。

関連するQ&A

  • Solarisでnkfコマンドを使いたい

    皆さんこんにちは。 よろしくお願いいたします。 solaris10(01/06) x86を使っています。 質問させていただきます。 LINUXにある、文字コード変換コマンド、"nkf"。 solarisには存在しないのですか? 又、似たようなコマンドがあれば、お教えていただきたく思います。 以上、よろしくお願いいたします。

  • nkfのバッチファイル

    親ディレクトリ以下のすべてのテキストファイルの文字コードをutf-8に変えようと思い、以下の内容のバッチファイルを作りました(nkf32.exeはバッチファイルと同ディレクトリに置いています)。Cドライブ(デスクトップ)上で実行したところ、問題なく動いたのですが、USBメモリ(Dドライブ)に置いて実行するとうまく動きません。ご教示お願いします。 >test.bat for /R .. %%i in (*.txt) do ( nkf32.exe -w8 --overwrite %%i )

  • 文字コード変換の件( nkf -w8 と iconv )

    nkfでのオプション:w8に該当するiconvのパラメータをご存知のかたは教えていただきたいと思います。 nkf -w8での変換結果はファイル先頭3バイトにiconvでの変換結果と異なるコードが付いているようです。 iconvにて次のパラメータは試しましたが、いずれもファイル先頭3バイトが nkf -w8の結果とは異なっています。 UTF-8 UTF-16 UTF-16BE UTF-16LE UNICODE なお、versionなどは関係ないとは思いますがfedora-10-preview環境です。

  • nkf -wのオプションの意味は何なのでしょうか?

    nkf -wのオプションの意味は何なのでしょうか? -Lw(Windowsの改行コードに変換する)なら見つかりましたが・・・ あとnkfでハマル(注意すべき)点など、経験者の方教えてください。 nkfコマンドを使わずにnkfでできること全てをperlで行うことは可能でしょうか?

  • 文字コードの判別について

    とあるテキストファイルがあります。UNIX上で文字コードの判別を行いたいのですが、nkf --guess test.txtと打って調べると、 test.txt: ASCII (CRLF) となります。このファイルは、Shift-JISだという判定だと思います。 ファイルをUTF8に変換したいので、(1)Windows上のエディタ(秀丸)の機能を使ってUTF8に変換してからUNIX上にアップロードしたり、また(2)UNIX上から直接nkf -w --overwrite test.txtを実行して変換したりしたのですが、nkf --guess test.txtを打って調べると相変わらず test.txt: ASCII (CRLF) のままです。 色々調べた結果、ファイルの中身が英数字のみしか書かれていないので、nkfがこのファイルをShift JISだと「推測」しているということがわかってきました。確かに、試しにファイルの中身に日本語を書いて保存して実行してみると、ようやくnkf --guess test.txtの結果が test.txt: UTF-8 (CRLF) と表示されるようになりました。 これらの結果は、ファイルの中身のマルチバイト文字のコードを見て初めて文字コードがわかるようになるというように思えます。 私の理解ではファイル自体にEUCやShift JIS、UTF-8などの文字コードがあるものとばかり思っておりました。つまり、test.txtの内容が"This is a pen."であったとしてEUC、Shift JIS、UTF-8では全く異なる三種類のファイルが存在し得るものだと思っておりました。しかしこれは私の理解が間違っていて、英数字であれば常にShift JISであり、マルチバイト文字があって初めてUTF-8なのかEUCなのかShift JISなのかが決定されるということなのでしょうか? 英数字のみのファイルでもUTF-8ファイルという前提を確認する方法はないのでしょうか? 宜しくお願いします。

  • コマンドプロンプトと ワイルドカードの使用

    nkf -w --overwrite paperbacks\reckoning\*.txt 上記の、*.txt のようにワイルドカードを使うケースがありますが、パスを""ではさむと、ワイルドカードが効かなくなるのですが、どのように解決したらいいでしょうか。 つまり、下記のようなケースでは、""で挟んだパスの中に*のワイルとカードが含まれていることがおそらく原因で、invalid argumentと表示されます。 nkf -w --overwrite "C:\Documents and Settings\tonbei\デスクトップ\book\*.txt"

  • LinuxにUTF8しかない

    postfixからgmail経由したメールが文字化けします。PHPには、コード等指定してます。文字化けを起こす原因が恐らくエンコードがUTF8しかない事です。どうしたら追加出来ますか? nkfやiconvは何故か使えません。 環境はUBUNTU11.10

  • 文字コードの変換方法

    お世話になります。 サーバ上で生成した、文字コードがEUCのテキストファイルをSJISに文字コードを変換したいのですが、nkfコマンドが使用できません。 nkfコマンドを使用せず、EUC⇒SJISへ文字コードを変換する方法をご教示頂けますでしょうか。 また文字コードを変更すれば改行コードの変更はしなくてもいいのでしょうか。 宜しくお願い致します。

  • nkfで全角ハイフンが半角になる(cygwin)

    http://sourceforge.jp/projects/nkf/ でダウンロードしたものをcygwinでmakeしたものを使っています。 nkf -w8 -W16L -x hoge.txt > moge.txt nkf -w16L -W8 -x moge.txt > hoge2.txt とすると、全角ハイフンが半角になってしまいます。 UTF-16LE→UTF-8→UTF-16LEで可逆変換できるようなオプションはどのように指定すれば良いですか? またはそれが可能な別のコマンドラインツールはありますか? (Windowsまたはcygwinで動作可能な) UTF-16で出力されるWindows RegistoryファイルをsvnにUTF-8で保存してバックアップしたいです。 UTF-16はsvnにバイナリ扱されるし、圧縮されるとはいえほとんどがASCIIのレジストリファイルでは無駄が多いので、UTF-8で保存しようと思いました。 具体的には以下のようなバッチファイルを起動時や定期的に実行します。 regedit.exe /e hoge.reg HKEY_CURRENT_USER\hoge nkf -w8 -W16L -x hoge.reg > hoge.txt svn.exe add hoge.txt svn.exe ci -m "" hoge.txt (パスは省略してあります) Windowsでの運用なのですが、nkfなのでLinuxのカテゴリに投稿させていただきました。

  • man nkfの文字化け

    Cygwinでman nkfすると文字化けするので、直し方を教えて下さい。 最新のnkf-2.1.4.tar.gzを使っています: $ man nkf nkf(1) NAME nkf - $B%M%C%H%o!<%/MQ4A;z%3!<%IJQ49%U%#%k%?(B SYNOPSIS nkf [-butjnesliohrTVvwWJESZxXFfmMBOcdILg] [file ...] DESCRIPTION nkf $B$O%M%C%H%o!<%/$G%a!<%k$d%K%e!<%9$NFI$_=q$-$r$9$k$?$a$K:n$i$l$?!"4A;z%3!<%I$NJQ49%U%#%k%?$G$"$k!#(B http://qiita.com/Takeru/items/1694653253a9bf038b47を参考にnkf.1jを変換してみました: 変換前: $ cat nkf.1j | grep -A7 ".SH \"NAME\"" .SH "NAME" nkf \- %M%C%H%o!<%/MQ4A;z%3!<%IJQ49%U%#%k%? .SH "SYNOPSIS" .IX Header "SYNOPSIS" nkf \fB[\-butjnesliohrTVvwWJESZxXFfmMBOcdILg]\fR \fB[\fR\fIfile ...\fR\fB]\fR .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBnkf\fR $O%M%C%H%o!<%/$G%a!<%k$d%K%e!<%9$NFI$_=q$-$r$9$k$?$a$K:n$i$l$?!"4A;z%3!<%I$NJQ49%U%#%k%?$G$"$k!# 変換後: $ cat nkf.1j | nkf -w8 | grep -A7 ".SH \"NAME\"" .SH "NAME" nkf \- ネットワーク用漢字コード変換フィルタ .SH "SYNOPSIS" .IX Header "SYNOPSIS" nkf \fB[\-butjnesliohrTVvwWJESZxXFfmMBOcdILg]\fR \fB[\fR\fIfile ...\fR\fB]\fR .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBnkf\fR はネットワークでメールやニュースの読み書きをするために作られた、漢字コードの変換フィルタである。 ・・・ここまではうまくいってそうですが、 cp -p nkf.1j nkf_Org.1j とバックアップを取って、 cat nkf_Org.1j | nkf -w8 > nkf.1j と上書きしても文字化けしたままです: $ man nkf nkf(1) NAME nkf - $B%M%C%H%o!<%/MQ4A;z%3!<%IJQ49%U%#%k%?(B SYNOPSIS nkf [-butjnesliohrTVvwWJESZxXFfmMBOcdILg] [file ...] DESCRIPTION nkf $B$O%M%C%H%o!<%/$G%a!<%k$d%K%e!<%9$NFI$_=q$-$r$9$k$?$a$K:n$i$l$?!"4A;z%3!<%I$NJQ49%U%#%k%?$G$"$k!#(B (jが付かない)nkf.1は英語用でしょうか? nkf.1に上書きしたり、nkf.1自身を変換したりしましたが、どれも文字化けしたままです。 他に何か試せることはありますか? 他の方はどうされているのでしょうか?