上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

jQueryなどのJavaScriptライブラリの登場でAjaxが手軽に使えるようになりました。

しかし、Ajaxを使ってサーバにあるテキストファイルや、他のHTMLファイルを読み込む場合、読み込む側も、読み込まれる側も文字コードをUTF-8にしてかないと文字化けが発生してしまいます。

たとえば、下記のように読み込まれる側も読み込む側の文字コードを同一にしていても、Ajaxで動的ロードすると文字化けが発生します。
読み込む側:index.html 文字コード:EUC-JP
読み込まれる側:test.txt 文字コード:EUC-JP

【index.htmlのコード(抜粋)】
$(function(){
 var test;
 var httpobj = $.get("/test.txt",function(){
  alert(httpobj.responseText);
 });
 alert(httpobj.responseText);
 $.ajax({
  url: "http://dev/test.txt",
  scriptCharset:"EUC-JP",
  dataType:"script",
  complete : function(){
   $("#result").append(
   "success:"+menu
   );
  }
 });
});

【test.txt の中身】
文字化けするかどうかのテスト


scriptCharset:"EUC-JP"と指定しても文字化けが発生してしまうので、全ファイルをEUC-JPやShift_JISからUTF-8へ文字コードを変換するか、
そもそもAjaxの使用をあきらめて別の方法をとる必要があると思っていました。

これを比較的簡単に解決する方法として、Apacheの文字コードを指定する、という手段があります。

例えばEUC-JPエンコードのtxtファイルをAjaxで読み込む場合、http.confに、
AddCharset EUC-JP .txt
と追記します。

すべてのテキストがEUC-JP扱いになるのが困る場合は、適当なディレクトリをEUC-JPテキスト保管専用にし、同ディレクトリに.htaccessを設置、その.htaccessに上記同様
AddCharset EUC-JP .txt
と追記します。

このようにしてからAjaxでロードすると、文字化けすることなく表示できるようになります。

テキストファイル以外、例えばJavaScriptファイル(js)をEUC-JPでロードする場合は、
AddCharset EUC-JP .js
のように、「.」の後を変更してやれば問題ありません。

また、
AddCharset EUC-JP .txt
AddCharset EUC-JP .js

のように記述すれば、複数拡張子を指定できます。
Related Posts

Thoughts on スポンサーサイト文字化け無し。文字コードUTF-8以外(EUC-JPなど)でAjax

says... すいません

Date:2009/11/21 06:30

予備知識ゼロなバカティエラにはさっぱりなんですが、
「文字化け」というワードに引っかかり読ませて頂きましたが、
やはり さっぱりでした^^;

私のブログ引越しの際にMT方式でインポートしてるんですが、
やはり、文字化けが所々見られるんですよね。
特に顔文字。
特殊文字等を使用した顔文字は確実ですね。
本文ならば、自分で修正できるんですが、
頂いたコメ等は無理みたいで・・・
やはりMTの様式上しょうがない事なんですかね?

says... 文字化けの対処

Date:2009/11/24 00:57

文字化けの対処はなかなか難しいですね。

特殊文字については、それほど重要な部分でなければ「あきらめる」のが正解かと考えています。
MTの仕様というよりは、文字コード(日本語)の仕様ですかね。

says... やはりそうですよね・・・

Date:2009/11/24 08:18

過去記事とは言えど、その記事を今見直した時の感想というか、
ダメ出しを(ダメばっかりなんですけどw)を書いているので、
極力訂正出来るものならば、訂正したかったんですが、
本文はなんとか訂正出来るので、コメ欄は諦めます。

ありがとうございました┏○

Leave a Reply

* less than 16 characters
* less than 24 characters
* less than 16 characters
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。