Windowsでのファイル変換における全角ハイフンの問題とUTF-8への変換方法

このQ&Aのポイント
  • Windowsのファイル変換で全角ハイフンが半角になる問題を解決する方法とは?
  • UTF-16で出力されるWindows RegistoryファイルをUTF-8に変換する方法は?
  • nkfコマンドを使用してWindowsでUTF-8へのファイル変換を行う方法について
回答を見る
  • ベストアンサー

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のカテゴリに投稿させていただきました。

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

  • ベストアンサー
  • ky072
  • ベストアンサー率60% (85/140)
回答No.1

「--no-best-fit-chars」オプションを使う、 または nkf の代わりに iconv を使う、 あたりで解決する「かも」しれません。

参考URL:
http://ja.wikipedia.org/wiki/Iconv
haporu
質問者

お礼

iconvで可逆変換できました。 ありがとうございました。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.3

nkf の --ms-ucs-map でどうでしょうか? あと、cygwinに閉じて作業しないのであれば、cygwinツールより Gnu-win32ツールの方がいいと思います。 http://gnuwin32.sourceforge.net/packages.html

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

未検証ですみませんが subversionを使うなら、属性 svn:mime-type を text/plain;charset=UTF-16LE にしたらいいかもしれない。 ついでにsvn:eol-style を nativeかCRLFにしておく。

haporu
質問者

補足

svn:mime-type を text/plain;charset=UTF-16LE にしてみました。 結果、db内のファイルサイズの差が全くなかったのですが、「ファイル '~~.reg' は改行文字が一貫していません」となって、svn:eol-style を nativeかCRLF に設定出来なかったからでしょうか(TortoiseSVN)。 また、UTF-16の20MBのレジストリファイルを1つ追加した状態でリポジトリの容量が1.9MB、 UTF-8にすると10MBでその場合のリポジトリは1.6MBだったんで、やはりky072さんの方法でUTF-8にして運用していこうと思います。 ありがとうございました。

関連するQ&A

  • 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環境です。

  • Powershell ではUTF8出力を表示できない?

    Powershell でnkfが使えないとわかりました。 http://d.hatena.ne.jp/sirocco/20090511/1242070398 UTF8絡みはDOS窓でやるしかないのでしょうか? (ファイルに限った話ではなく、パイプ入力で) utf8.txt これはUTF-8ファイルです。 Powershell> type utf8.txt | nkf -s ?????UTF-8?????????????? cmd.exe> type utf8.txt | nkf -s これはUTF-8ファイルです。 Powershell 1.0 ローカライズ版 Windows XP SP-3

  • バッチの書方2題

    XP_HEsp3です。 バッチの書方で教えてください。 1.ファイルのタイムスタンプを比較する方法 次のような処理で更新日時が新しければ、 if hoge.txt-timestamp > hoge.utf8-timestamp ( nkf -w8Lu hoge.txt > hoge.utf8 ) というのはどう書けばよいでしょうか。 2.解説をお願いします。 set t=%time:~0,5% mkdir %date:/=_%_%t::=_% timeとdateの出力を利用する、出力にはコロンが入っている。 ・・・・位しか分りません。 実行してみてアンダーバーの意味は分りました。 ~0,5% とスラッシュが分りません。

  • Cygwinが起動できなくなった

    現在、WindowsVsitaにCygwin/Xのversion1.5.3をインストールした状態です。 つい最近まで、リンク先が 「C:\cygwin\usr\X11R6\bin\run.exe /bin/bash.exe -l -c "/bin/startxwin.bat"」 となっているショートカットアイコンをダブルクリックすることで、 /bin/startxwin.batというバッチファイルから、/bin/bashをログインシェルとして、/bin/XWin(Xサーバー)やktermなどをたちあげることができたのですが、本日突然そのアイコンをダブルクリックすると 「Error : Couldn't locate /bin/bash.exe」 と表示されて立ち上がりませんでした。 いろいろ試してみて、最終的に、そのアイコンを右クリックし「管理者として実行」を選択すると なんとか以前と同じように立ち上げることができました。 そうすると、アクセス権の問題のような気がしますが、何が悪いのかが分かりません。 何か思い当たることがありましたら、是非アドバイスをお願いしたいと思います。 あと、起動できなくなった理由として思いつくのは、Cygwinに関するレジストリキーしかありません。 Cygwinに関係するのキーは HKEY_LOCAL_MACHINE/SOFTWARE/Cygnus Solutions HKEY_CURRENT_USER/Software/Cygnus Solutions 以下に格納されているようなのですが、いじった覚はありませんので、もしかするとコンピュータが勝手に変更してしまった可能性があります。 Cygwinを使っている方がいらっしゃれば、各レジストリキーのデフォルトの値を教えていただけないでしょうか? また、他に

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

    とあるテキストファイルがあります。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ファイルという前提を確認する方法はないのでしょうか? 宜しくお願いします。

  • 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自身を変換したりしましたが、どれも文字化けしたままです。 他に何か試せることはありますか? 他の方はどうされているのでしょうか?

  • cygwin でstackdump

    cygwinでstackdumpを吐き出します。(これはcoreファイルですが)これ↓からエラーの場所を特定できるでしょうか? よろしくお願いいたします。 $ gdb -c makeConnect.exe.core GNU gdb (GDB) 7.5.50.20120815-cvs (cygwin-special) Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-cygwin". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. [New Thread 0x1] [New process 1] [New process 1] #0 0x00401f55 in ?? () (gdb) where #0 0x00401f55 in ?? () #1 0x20000008 in ?? () #2 0x00401b46 in ?? () #3 0x0022aa40 in ?? () #4 0x00402a12 in ?? () #5 0x0022aa40 in ?? () #6 0x61007128 in ?? () #7 0x00000001 in ?? () #8 0x0022acc0 in ?? () #9 0x610050dd in ?? ()

  • DragDropの挙動

    前から気になっていたこと。 [環境] WinXP Pro SFP無効(この前の無人インストール時に機能を外した。) explorer.exeで C:\hoge.txtというファイルがある時、 C:\hage\内にドラッグして持っていくと、 C:\hoge.txtのファイルは「無くなり」 C:\hage\hoge.txtが出来る C:\hoge.txt をD:\にドラッグして持っていくと D:\hoge.txtにファイルが出来、C:\hoge.txtは「残る」。 CとDは多分同じHDDでパーティションを分けている。 なお、 explorer.exeを2つ起動して別ウィンドウ間で移動させても 同じウィンドウ内でも結果変わらず。 仕様でしょうか? でも前はこうじゃなかった気が・・・ 何かまずい設定をしたのかな?

  • grepコマンドの使い方

    下記のようなファイルがあるとします。 カレントディレクトリ /home から"hello"という文字列が含まれるテキストを grepしたい場合、コマンドはどのようにすればいいのでしょうか? 色々な方法があると思いますが、よろしくお願いします。 ---------------------------------------------------------------------- /home/hoge1/foo1.txt foo2.exe foo3.txt /home/hoge2/hogehoge2/foo4.txt foo5.exe /home/hoge3/hogehogehoge3/foo6.txt foo7.exe foo8.zip ----------------------------------------------------------------------