MENU

お知らせ:2021/2/18 ツールサイト(affi-sapo-sv.com)から、開発ノートを独立させました。

 

JavaScript文字列操作エラー対応

【JavaScript】 文字化けするとき確認すること

更新日:2020/10/09

 

文字化けする理由

 

 

htmlやjsファイルなど、元となるソースコードはUTF-8シフトJISという形式で保存されています。

 

JavaScriptはソースコードから読み込んだ文字列を内部データとして取り込む際、UTF-8シフトJISからUTF-16という文字コード形式に変換します。

 

しかしJavaScriptは、元のソースコードの文字データだけでは、UTF-8なのかシフトJISなのかという判断ができません。

 

文字コードがどの形式なのかわからないと、上手くUTF-16に変換できなくて文字化けしてしまうのです。

 

なお、文字コードについては次の記事をみてください。
UTF-8・16やShift-JISって何?文字コードについて説明してみる

 

文字コード判断1:応答ヘッダで判断している

 

文字コードの判断はサーバーから送られてきた応答ヘッダーを参照します。

 

ブラウザ 応答ヘッダー 確認

 

応答ヘッダーの、content-typeのcharsetが文字コードです。

 

確認方法は、次の記事を見てください。
応答ヘッダーの確認方法

 

文字コード判断2:htmlのmetaタグで判断している

 

応答ヘッダーにcontent-typeがない場合は、htmlのheadタグ内にあるmetaタグが参照されます。

 

例えば、次のhtmlコードは文字コードがUTF-8であるということを指示しています。

 


<html>

<head>
<meta charset="utf-8"/>
<script>
alert("JavaScriptで文字列が文字化けする理由");
</script>

</head>
<body>
</body>
</html>

 

文字コード判断3:自動判断している

 

応答ヘッダーまたはmetaタグで判断できない場合は、データを精査して自動判断します。

 

 

 

これらの情報から、文字コードがUTF-8であると判断して、UTF-8用の変換アルゴリズムを使用してUTF-16に変換しています。

 

 

文字化けの対処法

 

文字化けする理由がわかったところで、その対処法をお伝えします。

 

html内のscriptタグ内での文字化けと、外部jsファイルでの文字化けで、それぞれ対処法が異なります。

 

html内のscriptタグ内で文字化けする場合

 

対処法:

 

metaタグとファイルの保存形式が合っていないのが原因なので、タグと保存形式を統一します。

 

補足:

 

html内のスクリプトで文字化けがおこるケースはそれほど多くありません。
なぜなら、htmlをブラウザ表示したときに表示される文書が文字化けしているからです。
スクリプトの前に、そちらの現象で驚いて対処しているはずです。

 

そこでここでは、html文書が文字化けするときの対処法としてお伝えします。

 

html文書が文字化けする原因は、metaタグと実際の文字コードが異なっていることです。

 

例えばmetaタグが、次のようにUTF-8となっているとき、

 

<meta charset="utf-8"/>

 

次のようにシフトJISで保存したとします。ちなみにWindows10のメモ帳は、シフトJISはANSIという名前になっています。

 

メモ帳 ANSI(シフトJIS)で保存

 

このとき、htmlファイルをブラウザで表示すると、文字化けします。

 

ブラウザで表示すると文字化けする

 

タグと保存形式を統一することで、文字化けを防ぐことができます。
この時点で、JavaScriptの文字化けも解消されているはずです。

 

外部jsファイルが文字化けする場合

 

対処法:

 

対処法は二つあります。

 

  1. htmlファイルとjsファイルの文字コードを統一する
  2. 次のように、scriptタグで文字コードを指定する

     

    <script src="./test.js" type="text/javascript"  charset="shift_jis"></script>

 

補足:

 

外部jsファイルが文字化けするのは、htmlファイルとjsファイルの文字コードが一致していないのが原因です。

 

ファイルの文字コードを統一するか、jsファイルの文字コードを明示することで文字化けを解消できます。

記事の内容について

 

こんにちはけーちゃんです。
説明するのって難しいですね。


「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。

そんなときは、ご意見もらえたら嬉しいです。

ご意見はこちら。
https://note.affi-sapo-sv.com/info.php

【お願い】

お願い

■このページのURL


■このページのタイトル


■リンクタグ