WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

日本語の文字化けの問題(2)

by WebSurfer 2010年5月19日 22:24
[WebResource.axdを圧縮] の設定

先の投稿 日本語の文字化けの問題(1) で書きました [WebResource.axdを圧縮] にチェックを入れると日本語が文字化けする問題に対応しました。

原因は、BlogEngine.Core の Web\HttpModules フォルダの中にある HTTP モジュール CompressionModule.cs で、Encoding.Default でバイト列を文字列に変換し、文字列を処理した後、 再び Encoding.Default で文字列をバイト列に戻しているところでした。

MSDN ライブラリによると、Encoding.Default は "オペレーティング システムの現在の ANSI コード ページのエンコーディングを取得します" とのことで、 サーバーの OS のデフォルトの Encoding になるようです。自分が使っているホスティングサービス会社のサーバーは日本にあるので、Encoding.Default は Shift_JIS になるようです。

一方、実際の Encoding は UTF-8 であるため、Encoding.Default での変換で情報が失われて文字化けしてしまうようです。

web.config の globalization 要素の requestEncoding, responseEncoding を Shift_JIS にすると文字化けがなくなるという話を Web で見ますが、そういう理由のようです。

正しい解決方法は、CompressionModule.cs で使われている Encoding.Default を実際に使用されている Encoding にすることだと思われます。

WebResourceFilter クラスの Write メソッドの中に 2 ヶ所問題の部分がありますが、それを以下のように変更してみました。

public override void Write(byte[] buffer, int offset, int count) { //string html = System.Text.Encoding.Default.GetString(buffer); string html = HttpContext.Current.Response.ContentEncoding.GetString(buffer);      ・・・中略・・・ //byte[] outdata = System.Text.Encoding.Default.GetBytes(html); byte[] outdata = HttpContext.Current.Response.ContentEncoding.GetBytes(html); _sink.Write(outdata, 0, outdata.GetLength(0)); }

とりあえず、上の写真のように [WebResource.axdを圧縮] にチェックを入れても文字化けはしなくなりました。このまましばらく様子を見たいと思います。

Tags:

BlogEngine.NET

日本語の文字化けの問題(1)

by WebSurfer 2010年5月4日 13:48

ストアに SQL Server を利用する設定では、日本語の文字化けの問題が出ない理由が分かりました。 「高度な設定」の「WebResource.axdを圧縮」にチェックマークが入っていないためでした(チェックマークを入れると文字化けします)。

自分でチェックマークを外したわけではなく、自動的にそうなるので気がつきませんでした。

ストアに SQL Server を利用する場合、web.config の BlogEngine 要素下の blogProvider 要素の属性を defaultProvider="DbBlogProvider" としますが、その場合、デフォルトでは「WebResource.axdを圧縮」にチェックマークは入りません。

ちなみに、ストアを xml ファイルにするには defaultProvider="XmlBlogProvider" としますが、その場合は自動的にチェックマークが入りました。

Tags:

BlogEngine.NET

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年3月  >>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

View posts in large calendar