\\x(¥x)から始まるUnicode文字列を読めるようにする


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, テキスト処理 > \\x(¥x)から始まるUnicode文字列を読めるようにする
「Apacheのアクセスログに \xe3\x81\x9d のような文字化けした文字列が出ていて読めない」
「Tripwireの改ざん検知ログに \x から始まる謎の文字列が表示された」

このような \x から始まる文字列はUTF-8のバイト列をエスケープした形式で、
Perlを使えば日本語に変換して読むことができます。

この記事では、\x から始まるUnicode文字列をPerlで読めるようにする方法を解説します。
【この記事でわかること】
\x 始まりの文字列はUTF-8バイト列のエスケープ表現
perl -e 'print "\xe3\x81\x9d..."' で日本語に変換して表示できる
・Pythonを使う方法も同様に利用できる

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

\xから始まる文字列とは何か

\x から始まるバイト列は、UTF-8でエンコードされた日本語のバイト表現です。

たとえば「そ」という文字は、UTF-8では3バイト(\xe3\x81\x9d)で表現されます。
Apacheのアクセスログやセキュリティツールが、この形式でバイト値を出力することがあります。

以下のようなログが出た場合を例にします。

File system error. Filename: /usr/bin/pdgyjqltyz \xe3\x81\x9d\xe3\x81\xae\xe3\x82\x88\xe3\x81\x86\xe3\x81\xaa\xe3\x83\x95\ xe3\x82\xa1\xe3\x82\xa4\xe3\x83\xab\xe3\x82\x84\xe3\x83\x87\xe3\x82\xa3\xe3\x8 3\xac\xe3\x82\xaf\xe3\x83\x88\xe3\x83\xaa\xe3\x81\xaf\xe3\x81\x82\xe3\x82\x8a\ xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93

Perlで\xバイト列を日本語に変換する

基本的な変換方法

perl -e 'print "..."' コマンドに \x バイト列をそのまま渡すと、
Perlが内部でUTF-8テキストとして解釈して出力します。

$ perl -e 'print "\xe3\x81\x9d\xe3\x81\xae\xe3\x82\x88\xe3\x81\x86\xe3\x81\xaa\xe3\x83\x95\xe3\x82\xa1\xe3\x82\xa4\xe3\x83\xab\xe3\x82\x84\xe3\x83\x87\xe3\x82\xa3\xe3\x83\xac\xe3\x82\xaf\xe3\x83\x88\xe3\x83\xaa\xe3\x81\xaf\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93"' そのようなファイルやディレクトリはありません

コマンドは一行で実行します。\x バイト列が日本語テキストに変換されて表示されます。

改行を追加して見やすく出力する

を末尾に追加すると、出力後に改行されて見やすくなります。

$ perl -e 'print "\xe3\x81\x9d... "'

Pythonで変換する方法

Perlの代わりにPythonを使うこともできます。

$ python3 -c 'print(b"\xe3\x81\x9d\xe3\x81\xae\xe3\x82\x88...".decode("utf-8"))' そのようなファイルやディレクトリはありません

Pythonでは b"..." でバイト列を作り、.decode("utf-8") でUTF-8テキストに変換します。

本記事のまとめ

やりたいこと コマンド
Perlで\xバイト列を日本語変換 perl -e 'print "\xe3\x81..."'
Pythonで\xバイト列を日本語変換 python3 -c 'print(b"\xe3\x81...".decode("utf-8"))'

Linuxのログ解析、もっと深く理解したいですか?

ログの文字化け解決に限らず、Linuxサーバーの管理には様々な知識が必要です。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。