質問: 確認が遅くなり申し訳ございません。 > > 「dmesgに出てくる」というのは、どのようにして出てくるのでしょうか。「dmesg」というコマンドを実行したときなのか、何か他のときなのか教えて下さい。 > > > こちらは dmesg の実行結果が文字化けしています。 dmesg を実行したときに↓のような出力があるのですが、そのパスが日本語だと文字化けしてしまいます。 ``` disk0s2: I/O error. 0 [Level 3] [Facility com.apple.system.fs] [ErrType IO] [ErrNo 5] [IOType Read] [PBlkNum 37422984] [LBlkNum 0] 0 [Level 3] [Facility com.apple.system.fs] [DevNode /dev/disk0s2] [MountPt /] [Path /path/to/error-file] ``` この `/path/to/error-file` の部分に日本語が含まれていると `/path/to/\M-e\M-=\M^S\M-g\M^_\M-"` ... のように文字化けしたメッセージが出力されてしまい、パスがわからなくなってしまっています。 > > 書かれている文字は正確ですか? > > > 上記のような文字列が続いています。全ては記載していませんが、続いている文字は同様です。
回答: > > \M-e\M-=\M^S\M-g\M^_\M-" > > > utf-8で、「当矢」ですね。`"\xe5\xbd\x93\xe7\x9f\xa2"` `\M`で、次の文字(`'e'→"\x65"`)に対して8bit目が1ということです(`"\xe5"`)。 ``` echo '\M-e\M-=\M^S\M-g\M^_\M-"' | ruby -pe '$_=$_.gsub(/\\M-(.)/){($1.ord+128).chr}.gsub(/\\M\^(.)/){(($1.ord&31)+128).chr}' ⇒ 当矢 ```