過去の投稿記事 new!
・【画像】漫画でわかる外国人参政権
・東京電力のHPで停電状態が確認できたり(サービス再開!)
・戦国時代 ~ 江戸時代の徳川家康が熱かった
・vaio のバッテリは寿命が短いような気がする
・話題の Western Digital 製 WD20EARS を購入した
・C01LC をビックカメラで買ってきた
・2025年には空中都市が現実化?!
・【動画】わかりやすい「宇宙ひも理論」
・今世紀には「富士山噴火」「東海連動地震」「首都圏直下型地震」か?
・滅びた町、南浜町が Googleストリートビューで見れる

【 amazon 送料無料キャンペーン 】

バックリンクはご自由にどうぞ!     http://mfsocket.blogspot.com/feeds/posts/default?alt=rss リンク集 / ログイン

2011/10/07
chcp 1200(UTF-16) って使えないじゃん

 
コマンドプロンプトで UTF16 のファイル名 などを dir /b で表示して、
その値を xargs に渡そうと思っても出来ない。
 
理由は3つある。まずは コードページ 932 の為、出力やパイプが行われた
瞬間に CP932 に変換されてしまう。
 
パイプ経由でアプリケーションに渡る時点で、Windows Shift_JIS に変換される
ので、UTF16 コードのまま渡すことは不可能。また逆に考えると type コマンド
で UTF16 のファイルを表示し、それをファイルにリダイレクトしてやれば Shift_JIS のファイルを生成することも可能。
 
もう一つの理由。パイプを実装しているプログラムコードは、ほぼ全てが SJIS
前提にしているので仮に Unicode で渡されても正しく処理が出来ない
 
 
最後の理由、文字コードを chcp コマンド 1200 、 utf16 を設定するのに…
そもそも失敗する。UTF-8 の 65001 は成功する。
 
使えねぇーー。日本語版 Windows では利用できないって噂は本当かも?
 
って事で Unicode のファイル名などがあると xargs などパイプを利用した
コマンドは正しく動作しないことになります。
 
正確に言えば、以下のやり方で渡すことはできると思いますが。
 
1. chcp 65001 で UTF8 モードにして、UTF-8 の入力を受け付ける
プログラムを実装する。但しフォントが無いので画面には正しく表示できない。
 
2. chcp 932 のままで UTF-8 を渡す。UTF-8 の入力を受け付ける
プログラムを実装する。Android の adb logcat を見るに、これが
現実的?
 
2番の方法ならたぶんこんな感じ。
 
dir /b *txt | sjis2utf8 | xargs-utf8toutf16 echo
 
理論上は上の手順でいけると思う。utf-8 に変換して、次に utf-8 に対応した
xargs を渡してやれば良い。
 
イヤ…だめだ。パイプに渡される時点で UTF16 があると SJIS になるので、
そもそもの出力をUTF-8 にしてやらないとダメってことになるかも。
 
dir_utf8 /b *txt | xargs-utf8toutf16 echo
 
試して無いけど、これで行けそう?ちょっと時間を見つけたら試してみます。
 
 
いけた。これならパイプ経由で を引数として渡すことも可能だ。
コマンドを自作しなければならないという点がありますが、データを渡せる事が
重要なので、この機能は必須だな。

0 コメント:

  • コメントには <b>, <strong>, <em>, <i>, <a> など一部の HTML タグを使用できます。