はじめに
日本語などのマルチバイト文字を扱っている時に、たまに出くわすことがある文字化け。大抵の場合はUTF-8
の文字列をShift-JIS
で解釈、ないしその逆だと思います。
これがエラーメッセージやログなどに含まれている場合、元の内容が欲しいので復元したくなります。
よくある復元手段としては、テキストエディタの機能を使って文字コードを変えてみたり、コマンドやツール(iconv
とか)を使ったり、というところでしょうか。
ただ、今はもう生成AIに聞けば一発で教えてくれますよという記事です。
早速聞いてみた
用意した文字化けはこちら
逋サ骭イ縺輔l縺ヲ縺�縺ェ縺�繝ヲ繝シ繧カ繝シ縺ァ縺�
聞いた結果がこちら
お見事。正解です。
ちなみにこの文字化けは↓のコード(Kotlin)で作っていました。
Kotlin
"登録されていないユーザーです".toByteArray(Charsets.UTF_8).let { String(it, Charset.forName("SJIS")) }
// 逋サ骭イ縺輔l縺ヲ縺�縺ェ縺�繝ヲ繝シ繧カ繝シ縺ァ縺�
元通りに復元できていますね。
おわりに
文字化けの復元って、失われている情報もあるので完全には復元できないこともあります。実際、文字化けを生成したコードをただ逆にしただけでは、キレイな復元は出来ませんでした。
Kotlin
"逋サ骭イ縺輔l縺ヲ縺�縺ェ縺�繝ヲ繝シ繧カ繝シ縺ァ縺�".toByteArray(Charset.forName("SJIS")).let { String(it, Charsets.UTF_8) }
// 登録されて�?な�?ユーザーで�?
恐らくそのあたりも、より精度の高い方法を使っているのか、自然な文章になるように上手いこと補完してくれているのだと思います。
生成AI活用術!と言うにはあまりにも地味な使い方ですが、覚えておくといつか役に立つかもしれません。