結論
ライブラリkconvをrequireして「.toutf8」する。これ以外は何もせずcmdに日本語が表示されました。世のなかすべてUTF-8になればいいと思っている。
require "kconv"
system("ping 8.8.8.8 > ping.txt") #ちなみにこの出力はANSI、Shift-JISです。
file = File.read("ping.txt")
file = file.toutf8 #日本語表示
puts file.encoding
#file = file.encode("UTF-8") #文字化け、encodeメソッドの使い方間違えている?
puts file
とりあえずkconvとtoutf8を覚えておけばいいね!
文字コード
- Linuxのシェル文字コードはutf-8
- Windowsのシェルcmd文字コードはShift-JIS正確にはcp932
- Rubyのsystemコマンド書き出し文字コードはutf-8。ここは難しいね。下に書きます。
【実験】Rubyスクプリプトでsystemコマンドを使いpingを出力。
system("ping 8.8.8.8 > ping.txt") #日本語で記述される
f = File.read("ping.txt")
puts f #文字化け
puts f.encode("Shift-JIS") #文字化け
puts f.encode("cp932") #文字化け
とにかくcmdの文字コードをUTF-8に変換する。よって、とにかくcmdにて「chcp 65001」コマンドの実行が必要です。
- 方法1→Rubyスクリプトに書いておく
- 方法2→Rubyスクリプトを実行する前にcmdで「chcp 65001」を打っておく
方法1
system("chcp 65001")
system("ping 8.8.8.8 > ping.txt") #開いているcmdのchcpに従う、よってテキスト内容は英語
f = File.read("ping.txt")
puts f
日本語でpingを出力したい。
方法2
system("ping 8.8.8.8 > ping.txt") #テキスト内容は日本語
f = File.read("ping.txt")
system("chcp 65001")
puts f
中途半端ですがここで実験終了です。
「kconvでいいじゃん!」
そして後日、「kconvでいいじゃん!」というのを冒頭の結論に書きました。実験を中断した理由です。「toutf8めっちゃラクじゃん!」
しかし収穫もありました。
- 文字コードを調べるcmd「chcp」
- 文字コードを変更するcmd「chcp 65001」(utf-8)
- 文字コードを変更する(戻す)cmd「chcp 932」(cp932、ANSI、Shift-JIS)
- Rubyのsystem()コマンド
全然関係ない話
言い訳
とりあえず素人プログラマーとしては深追い、探求せず作業の自動化を図ります。kconvのtoutf8で良しとします。そういう人たち増やしたいです。
反論「いやいや中身も知らず、kconvが何をしているかも知らず使っては…」
はい!ごもっともです。ですが、エントリー時点では良してしてください。まずはすそ野を広げたいです。
ある有名な記事では「コンピュータを知りたければOSをUNIXライクにしなさい!」とあります。Linuxですね。しかし、私はWindowsです。bashは継続して学習しております。WSLが十分ではないことも知っています。しかし、優先順位としていまこの瞬間の作業の煩わしさを解消したいです。世の中で解消していってほしいと思います。人を減らしたいです。
Windowsを使っているという現実。
でも目の前にあるのは「Windows」という現実笑。VM入れてLinux、そんなこともできますが、リソースもだし、切り替えが面倒です。日常のエンタメ利用もあるので昔からのWindowsが楽です。喰わず嫌いなだけかもですが。日常利用でストレスは抱えたくないです。自動化でマネタイズができるようになってからLinux頑張りたいです。とりあえずbashは継続します。まずはWindowsでも動くならそれでいいです!Ruby、WSL、cmd、自動化を頑張ります!
エスパー「そんなことしたら雇用はどうなるの?」
それもごもっともです。言いたいことはわかりますし、何とかしたい気持ちもあります。しかし、2次的3次的な影響は他に適任者がいるのではないでしょうか?それを仕事にしている人たちです。ほんとはそういう人たちがちゃんと考えないといけなんです。よって個人目標としては世の中の自動化です。客に不快な想いをさせるレジは要らないんです。「職業に貴賤なし」は平均的な言葉であり、レジは尊い仕事ですが、その中でも上記のようなレジは要らないんですね。ここら辺は永遠のテーマですね。「会社が不正をしてもちゃんと仕事をしている人はいる。だけどやっぱり会社は不正をした。」このループです。よっていっそのことロボットでいいんです。