- PR -

utf-8のときだけaspxページが文字化けする

投稿者投稿内容
ackkie
会議室デビュー日: 2004/01/05
投稿数: 4
投稿日時: 2004-01-05 17:31
言語C# ASP.NetでWebアプリケーションを開発しています。

新規にプロジェクトを作成し、
aspxページのデザイン画面でプロパティを開き文字セットをutf-8にすると
実行時に画面内の日本語(たとえばラベルコントロール)が化けます。

Page ディレクティヴにcodePage="65001"が入っていますし実際のファイルコードも
utf-8になっています。なのに化けます。
SJISやUNICODEなどでは文字化けがおこりません。

原因のわかる方いらっしゃるでしょうか?
以上よろしくお願いいたします。





VS.NET2003 + WindowsXP Proにおいて
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2004-01-06 14:36
asp.netで出力の「エンコーディング」を指定するにはWeb.configファイルの
以下の部分を設定するか(requestEncodingは入力エンコーディング指定)
<configuration>
 <system.web>
  <globalization requestEncoding="utf-8" responseEncoding="utf-8" />
   ・
   ・

あるいは@Pageディレクティブに
ResponseEncoding="utf-8"
のように記述します。

化けるといっても何が何に化けるのか、ですね。例えば「あいう」は
どう文字化けするか。それによって、どのEncodingで書かれているものを
どのEncodingとして(誤って)みているか、わかるのではないでしょうか。

@PageディレクティブのCodePageについては下記に記載があります。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconpage.asp

[ メッセージ編集済み 編集者: べる 編集日時 2004-01-06 14:55 ]
ackkie
会議室デビュー日: 2004/01/05
投稿数: 4
投稿日時: 2004-01-06 15:35
ご返答ありがとうございます。
JAVAはやったことがあるのですが、ASP.NETはまだ不慣れで..

いろいろ実験してみたところ、確かにcodePageやweb.configの設定によって自由に出力エンコーディングを変更できます。これは意図どおりの動きで問題ありません。

おかしいと思うのは、aspxの実際のファイルコードを"SJIS以外"に変えたときだけ、aspx
ファイルに"生で"書かれているラベルコントロールなどの文字が出力時に化けます。プロパティ画面の文字セットでたとえばUTF-8にすると(一回閉じて開かないとだめかもしれないが)実際のファイルコードもSJISからUTF-8になります。出力結果をみるとどうもVSのコンパイラ(?)はファイルのコードをUTF-8にもかかわらずSJISと決めて処理しています。

実際のaspxファイルをたとえばUTF-8にしても正常に動かすことができるでしょうか?
出力がUTF-8なのでファイルもできればUTF-8にしておきたいのですが...


[ メッセージ編集済み 編集者: ackkie 編集日時 2004-01-06 16:02 ]
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2004-01-06 20:14
web.config で fileEncoding="utf-8" を指定しても駄目ですか?
(あるいは「byte order mark プリフィックスを付けて保存された Unicode ファイルと UTF-8 ファイルは、fileEncoding の値とは無関係に、自動的に認識されます」らしいです)

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/gngrfglobalizationsection.asp
He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2004-01-07 09:25
[ファイル]-[保存オプションの詳細設定…]にて任意のエンコードを選択することで解決できませんか?

#以下、追記
すいません。ちょっと横柄な書き方になってしまいました。(慌ててたので……。)
↓で、べる様がまとめてらっしゃいますが、もちろんya様ご提示の方法でもOKですね。
私のは違う方向からのアプローチということで。

[ メッセージ編集済み 編集者: He 編集日時 2004-01-08 01:05 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2004-01-07 15:41
>ackkieさん
あ、そういう話でしたか、勘違いしてました。

[ファイル]>[名前をつけて・・を保存]で[保存]ボタンの横の▼を押して
[エンコードつきで保存]を選び、エンコードを「utf-8 シグニチャ付き」で
保存すると文字化けせずに表示されました。
Heさんおっしゃってるの方法で、上書き保存したときに常に指定したエンコード
で保存されるようです。

シグニチャなしの場合でも、yaさんのおっしゃってる方法でやると文字化け
しないはずです。
ackkie
会議室デビュー日: 2004/01/05
投稿数: 4
投稿日時: 2004-01-08 13:53
皆さんご返答ありがとうございます。

yaさん、べるさんのご指摘された方法でうまくいきました。


またyaさんのご指摘(BOM)でなぜUTF-8だけがうまくいかないのかも理解できました。
UNICODE(UTF-16)はBOM(シグネチャ)があるので自動認識するからなのですね。

UTF-8でもBOM(シグネチャ)をつけて保存したらできました。
またfileEncoding="utf-8"でもうまくいきました。

また以下の現象についても説明がつきます。
日本語環境でないのでデフォルトfileEncodingがsjisになってないからですね。
たとえUTF-8でおいたとしてもシグ付きかfileEncodingが設定されてないと動かないですね。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2085&forum=7

ほとんどの方はおそらくSJISで作成されているのでしょうか?

あと、

> Heさん

[ファイル]-[保存オプションの詳細設定…]のメニューを出したのですが、disableされていてうごきません。
なぜでしょうか?(デフォルトではないですよね。[ツール]-[カスタマイズ]-[コマンド]からドラッグアンドドロップしてだしたのですが...)


[ メッセージ編集済み 編集者: ackkie 編集日時 2004-01-08 13:54 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2004-01-08 17:00
引用:
[ファイル]-[保存オプションの詳細設定…]のメニューを出したのですが、disableされていてうごきません。
なぜでしょうか?(デフォルトではないですよね。[ツール]-[カスタマイズ]-[コマンド]からドラッグアンドドロップしてだしたのですが...)

私は特に設定はいじってないですが(VS.net 2002)デザイン表示だと
表示されないようですね。HTML表示だと表示されています。

スキルアップ/キャリアアップ(JOB@IT)