
HTMLの文字化けについて
クライアントPC(WindowsVista)で作成したHTMLファイルをサーバ(CentOS5.4)にアップして、ブラウザから確認してみたところ、文字化けを起こしてしまいました。
ローマ字は問題ないのですが、日本語が文字化けしてしまっており、表示がめちゃくちゃになってしまっています。
HTMLはK2Editorにて作成して、文字コードはShift-JIS、改行コードはCRLFとしております。
しかし、文字化けした状態でブラウザの文字エンコーディングをEUC-JPに変えて再度読み込んでみたところ、文字化けせずに表示されます。
サーバ側の文字コードは、
# vi /etc/sysconfig/i18n
LANG="ja_JP.EUC-JP"
と設定し、デフォルトのUTF-8からEUC-JPに変えております。
なので、もしかしたらサーバ側の文字コードとHTMLの文字コードが何か関係しているのかと私は思うのですが・・・
文字化けの原因がお分かりになる方いらっしゃいましたら、ご教授のほどお願い致します。
No.3ベストアンサー
- 回答日時:
#1です。
まず、質問の意図として
1.ひとまず、文字化けを解消したい。
2.文字コードをSHIFT-JISで統一し、文字化けを解消したい。
3.文字コードをEUC-JPで統一し、文字化けを解消したい。
が考えられます。
#2さんがおっしゃられるように、出力する文字コードを指定しているのは、サーバーの設定かと思います。対して、html内で指定する文字コードは表示(ブラウザが解釈)する文字コードの指定と位置づけることができると思います。従って、html内の記述如何で出力文字コードを変更することはできませんが、出力文字コードとhtml内の指定が一致しないとしっかり文字化けを起こします。
本題として、ひとまず文字化けを解消したいのであれば、質問内容を見る限り、出力文字コードはEUC-JPなので、htmlフォーマットをEUC-JPに変更して、head内で同じくEUC-JPを指定すれば、EUC-JP統一として文字化けは解消されるはずです。EUC-JPが問題ないのであれば、もっとも単純な方法です。
対して、文字コードをSHIFT-JISに統一して文字化けを解消したいのであれば、html自体は変更せずに、サーバーの出力文字コードを変更することになります。内容は#2さんの方法そのままかと思います。最初の質問内容にあるように、シェルを利用出来る、あるいはhttpd.confを編集できるのであれば、同じようにコードをSHIFT-JISに変更し、それが難しいようであれば、.htaccessによる設定になるかと思います。
話はずれますが、なぜ、デフォルトのサーバー文字コードをUTF8からEUC-JPに変更し、HTML文書自体をSHIFT-JISにしたかは分かりませんが、静的なコンテンツを扱うだけなら、UTF8をおすすめします。何らかのCGIの都合でEUC-JPに変更しているのであれば、EUC-JPに統一するか、ディレクトリ毎に.htaccessで希望文字コードを指定することになると思います。どこまでサーバーの設定が許されているかわからないのでなんとも言えませんが。
この回答への補足
tracerさん
ご丁寧にご回答いただき、感謝しております。
今回の件につきまして、文字化けを解消することができましたことをまずご報告致します。
下記、ご回答致します。
>まず、質問の意図として
1.ひとまず、文字化けを解消したい。
2.文字コードをSHIFT-JISで統一し、文字化けを解消したい。
3.文字コードをEUC-JPで統一し、文字化けを解消したい。
HTMLのフォーマットを文字コード:Shift-JIS、改行コードをCRLFにして、文字化けを解消したいと思っておりましたので、上記では"2"にあたると思います。
>文字コードをSHIFT-JISに統一して文字化けを解消したいのであれば、html自体は変更せずに、サーバーの出力文字コードを変更することになります。
HTMLファイルはShift-JISにして、サーバの出力文字コードに関する設定の変更を行いました。変更を行った箇所としまして、
# vi /etc/sysconfig/i18n
で
LANG="ja_JP.UTF-8"
とし、デフォルトのUTF-8に戻しました。また、
#vi /etc/httpd/conf/httpd.conf
で
AddDefaultCharset shift_jis
としました(AddDefaultCharset off でも文字化けせずに表示されることを確認)ところ、
文字化けせずに表示することができました。
>なぜ、デフォルトのサーバー文字コードをUTF8からEUC-JPに変更し、HTML文書自体をSHIFT-JISにしたかは分かりませんが、静的なコンテンツを扱うだけなら、UTF8をおすすめします。
現在はまだHTMLファイルしか作っておりませんが、いずれphpとpostgreSQLを使用して動的なページを作成したいと考えております。そうなりますと、phpのフォーマットは文字コードを"EUC"、改行コードを"LF"として作成するかと思い、DBのテーブルの要素に日本語を入れることを考えるとCentOS側の文字コードをEUCにしておかなければTeraTermなどのターミナルからDBに接続した際に、格納してある日本語が文字化けて表示されるのかと思ったからです。
当方ホームページを作成することに対してあまり知識がないのですが、動的なホームページを作成する際には
・テンプレートはShift-JIS CRLF
・phpやその他プログラムファイルはEUC-JP LF
で作成し、
・DBの文字コードはEUC-JP
かと思っておりました。
お陰様で解決することができ、とても助かりました。@
どうもありがとうございます。
※"静的なコンテンツを扱うだけなら、UTF8をおすすめします" とありますが、これはどういった理由からなのでしょうか?お時間ございましたら、お手数お掛けしますが、ご回答のほどお願い致します。
先ほど”補足”にてご報告致しましたが、”お礼”でご報告するべきでした。
度々申し訳ございません。
どうもありがとうございました。
No.4
- 回答日時:
> 静的なコンテンツを扱うだけなら、UTF8をおすすめします" と
> ありますが、これはどういった理由からなのでしょうか?
> お時間ございましたら、お手数お掛けしますが、ご回答のほどお願い致します。
一言で言ってしまえば、汎用性が高いということです。
静的コンテンツに限ったことではないのですが、UTF8は世界標準フォーマットですので、特に多言語対応のページを作ろうとしたときに、かなりの恩恵があります。多言語対応ページ作成の機会は少ないかもしれませんが、急な要件が出た場合に、対応できるかできないかは大きいと思います。前回の回答で「静的コンテンツ」と限定したのは、他者が作成したEUC-JPのCGIライブラリなどを使う可能性があったからです。ご自身で0からCGIを起こせるのであれば、動的コンテンツでもUTF8で問題ないと思います。
HTML、CSS、Javascript、PHP、DBは統一してUTF8を扱うことができます。そうすることは珍しいことではないですし、むしろスタンダードではないでしょうか。使用したいライブラリにもよりますが、著名なPHPライブラリはUTF8を蹴ることはほとんどないと思います。
UTF8に固執せずとも、DB、CGI、HTMLを統一した文字コードにすることによって、ほぼ文字化けからは開放されます。逆に文字コードが統一されていないシステムは、文字コード変換というリソースを余分に使いますし、その処理を作成するコストがかかります。
個人的には、どこかでダウンロードしたプログラムをそのまま使いたいといったことがない限り、文字コードを混在させる必要を感じません。
参考URL:http://mlang1.osaka-gaidai.ac.jp/multi/how_to_ut …
tracerさん
迅速なご対応、ご丁寧なご説明をありがとうございます。
お陰様で、UTF8にする利点につきまして理解することができました。今までCGIは利用したことがなかったのですが、便利なライブラリがたくさん利用できるようになっているので使用してみたいと思っておりました。
また、PHPに関してはまだ分かりませんがJavaScriptを扱う際にjQueryやprototype.jsなど色々なライブラリを使用したいと思っておりましたので、まだ何も作っていない今の状態からUTF8で統一して作成しておこうと思います。
ご教授のほど、ありがとうございました。
No.2
- 回答日時:
HTTP応答ヘッダに書かれているコードと合っていますか。
Mozilla系のブラウザに、WebDevelopperやLive HTTP Headersを組み込み、それらで確認するのが手軽です。
※ telnetで80番ポートに繋いで自分でHTTP要求ヘッダ送っても良いですが。
※ ネットワークモニタ・パケットモニタ・スニッファなどと呼ばれるソフト使って確認する事もできますが。
HTTP応答ヘッダ(response headers)の一要素として
Content-Type:text/html; charset=UTF-8
や
Content-Type:text/html; charset=EUC-JP
や
Content-Type:text/html; charset=Shift_JIS
といった形式で使っている文字セットが指定されているはずですので。
※ ;以降(charset含む)はオプションで無指定の場合にはiso-8859-1(西欧の文字セット)が使われる事になるので英数字や西欧で使われている文字が表示されそうに思います。
> 初歩的なことであれなんですが、HTML自体に文字コードは指定していますか?
非常に初歩的な事ですが、それが使われるのは補助的でしかありません。
書く(保守する)方が目安にする程度のものです。
少なくとも通信で送られてきたコンテンツについては、ブラウザはHTTP応答ヘッダの方を優先する事になってます。
> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
なぜ、http-equivという名前になっているのか考えましょ。本来はウェブサーバが送信するファイルを解析して付けるものですが、現状はそうなっていません。
サーバの設定を合わせてやる(ウェブサーバがcharset=Shift_JISオプション付きのContent-Typeヘッダを出力するよう設定してやる)必要があります。
プロバイダが標準はEUC-JPなのえEUC-JPで配置して/標準はUTF-8なのでUTF-8で配置してといっている場合にはそういう事です。
※ CGIやPHPだと、コンテンツの中で指定(変更)できます。また、ウェブサーバの設定を変える事も可能( .htaccessやhttpd.conf等の変更)だと思います。手順はプロバイダが案内しているかと思います。
saijyo_739さん
ご丁寧なご説明・ご回答どうもありがとうございます。
tracerさんのご回答と合わせて拝見させていただきました。
まず、サーバ側の文字コードの設定を
# vi /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"
でEUC-JPからUTF-8に変更しまして、また
#vi /etc/httpd/conf/httpd.conf
AddDefaultCharset shift_jis
と設定した後に、当方のFFにアドオンでWebDevelopperを入れておりましたので、そちらから確認致しましたところ、
Content-Type:text/html; charset=Shift_JIS
と表示されました。
この状態で、フォーマットをShift-JISにしたテンプレートをアップして確認してみたところ、文字化けせずに表示されました。
サーバ側の文字コードとテンプレートの文字コードを合わせてあげなければならないのですね。
問題が解決できてとても助かりました。また、勉強になりました。
どうもありがとうございます。
No.1
- 回答日時:
初歩的なことであれなんですが、HTML自体に文字コードは指定していますか?
html4.0なのかhtml5なのか、xhtmlなのかはわかりませんが、documentスイッチやmetaタグやhtmlタグにで指定するあれです。
この回答への補足
tracerさん
早速のご回答、ありがとうございます。
また、説明が少なくご迷惑お掛けしまして申し訳ございません。
サーバにアップしたHTMLですが、
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
<title>タイトル</title>
<meta name="description" content="説明文" />
<meta name="keywords" content="キーワード1,キーワード2,・・・" />
</head>
<body>
テスト
</body>
</html>
となっておりまして、 charset=Shift_JIS で文字コードをShitf-JISに指定しております。
上記の内容のテンプレートをアップしてみても、文字化けを起こしてしまいます。試しに、テンプレートの文字コードをEUC-JPにして確認してみたところ、それでも文字化けを起こしてしまいました。
クライアントPCからは、ブラウザはIE8とFF3.6で確認しておりまして、文字コードがShift-JISの状態でブラウザの文字エンコーディングを日本語(Shift-JIS)に変更してページの再読み込みをしたところ、文字化けせず"テスト"と表示されました。
ブラウザのデフォルトで、文字エンコーディングがUnicode(UTF-8)となっているのでShift-JISのテンプレートを表示させた際に文字化けしてしまっているということなのでしょうか?
だとしますと、他のホームページを閲覧した際に文字化けしないのが不思議なのですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- HTML・CSS HTMLエディタBracketsの文字化け 3 2022/04/28 14:50
- Google Drive 【Googleドライブ】ドライブ上内でのフォルダ移行について 4 2022/11/30 12:50
- HTML・CSS CSSファイルの日本語コメントが文字化けしてしまう 3 2022/12/26 15:50
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「x-sjis」「Shift_JIS」同じ意...
-
*.htmから*.htmlへの一括変換ツ...
-
htmlファイルの表示が真っ白
-
Dreamweaverでページ全体が文字...
-
FC2ショッピングカートのサイド...
-
HTMLの<a>タグで [テキスト文(....
-
ホームページ作成ソフトでのソ...
-
テキストエディットでhtml文書...
-
一括置換で、すべてが文字化け!
-
文字コードの違い
-
海外テンプレートを使い日本語...
-
ホームページのソースの文字化...
-
ワードで保存したWebファイルが...
-
文字化けが直りません。
-
htmlの開き方
-
utf-8 文字化け
-
HTMLエディタの選択
-
変な文字で表示されます
-
スタイルシートをエディタで読...
-
EUCで保存できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストエディタvscodeでプロ...
-
Dreamweaverでページ全体が文字...
-
エクセルで作成した表のハイパ...
-
テキストエディタ grepの機能...
-
「x-sjis」「Shift_JIS」同じ意...
-
HTMLの<a>タグで [テキスト文(....
-
リソースビューが表示されない(...
-
ホームページを作りたいのです...
-
htmlファイルの表示が真っ白
-
eclipseを使ってweb上に表示さ...
-
Dreamweaverでソースが文字化け...
-
HP作成で…日本語と韓国語表示
-
大切なデータを誤って上書きし...
-
オフラインでのHTMLについて
-
htmlファイルが開けません。
-
EUCファイルの扱い方?
-
HTMLファイルからリンクタグだ...
-
半角カタカナ(csvやtxtデータ...
-
文字コードって結局どれを使うの?
-
SSIでインクルードしたファイル...
おすすめ情報