とあるプロジェクトで、Ajaxを使ったWeb検索プログラムを作っている。
JS側で取得してきたデータをHTML形式の文字列に変換し、jQueryのappendメソッドでDOM要素を検索結果として出力するという仕様だ。
単純な仕様なのだが、appendメソッドで出力したDOM要素が文字化けしてしまった。
原因:ファイル間で文字コードが異なるため
今回のサーバーの仕様上、HTMLファイルは「Shift-JIS」で作らなければならず、どうやらこれが原因らしい。
今回用意したファイルの文字コードは以下のとおり。
ファイル名 | 文字コード |
index.html | Shift-JIS |
js/scripts.js | UTF-8 |
「UTF-8」のJSで生成された文字列を「Shift-JIS」ファイルに追加しようとしているので、よく考えると文字化けが起こるのは当然だ。
解決法:JS読み込み時に文字コードを指定
以下のとおりHTML側で文字コードの指定をする。
<script src="./js/search.js" charset="UTF-8"></script>
これで一発で解決した。