Linux系のマシンでWebサーバーを立てhtmlファイルをviやvimで編集している際に、日本語入力が文字化けすることがあります。
今回、DockerコンテナでWebアプリを立ち上げてページを表示すると日本語が文字化けしていたので対応方法をまとめました。
CentOSで構築している方は参考にしてください。
「vi」や「vim」で日本語が文字化けする事象を解消する方法
CentOS8で構築した、Djangoの環境でvi、vimによるhtmlファイルの編集をした際、以下のようにページで日本語が文字化けするようになりました。

編集したhtmlファイルを確認すると以下のようにハイライトされているところが日本語が文字化けとなっています。
<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>^[$B%F%9%H^[(B</title>
<!-- Bootstrap -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<h1>Hello, world!</h1>
<h1>^[$B$3$s$K$A$o^[(B</h1>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/bootstrap.min.js"></script>
</body>
</html>
※上記はvimで編集したファイルですが、viで見ると文字化けをしていることがわかりました。
日本語が文字化けする原因はエンコーディングの判別に失敗している
結論を言うと、文字化けの原因は、viやvimをファイルを編集する際、エンコーディングの判別に失敗しているということです。
試しに、以下のコマンドをファイル編集画面で実行します。
:set enc?
正常だと以下のようにエンコーディングが判別されて表示されます。
encoding=utf-8
エンコーディングの判別に失敗している場合は以下のような値が返ってきます。
encoding=latin1
日本語の文字化けを解消する方法
上記のように、エンコーディングが「latin1」と表示された場合、viやvimでは日本語入力をしても文字化けが解消されません。
エンコーディングを「UTF-8」と解釈させる必要があるので、vi、vim編集画面で以下のコマンドを実行します。
:set encoding=utf-8
このコマンドを実行し、ファイルを日本語で入力すると以下のように日本語が文字化けせずに表示されます。

vimrcファイルの編集
上記のように毎回vim編集時にエンコーディングの変更をしたくないので以下コマンドで事前設定をしておきます。
$ vi ~/.vimrc
" vim の独自拡張機能を使用 (vi との互換性無し) :set nocompatible " 文字コードを指定 :set encoding=utf-8 " ファイルエンコードの指定 :set fileencodings=utf-8,iso-2022-jp,euc-jp,sjis " 自動認識させる改行コードの指定 :set fileformats=unix,dos,mac
私の設定は上記で、次回以降はvimで問題なく編集できるようになりました。
日本語が文字化けをする際は参考にしてください。

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。

コメント