jsp自体はなんてことなく普通に2バイト文字が表示されるのだが、クラスファイルを作成して読み込むとことごとく文字化けする。
読み込み方が悪いのかと思いきや、System.out.println()でコンソールに吐き出す文字まで文字化けする始末。これ如何に。
基本的にUTF-8ですべて制作しているので、なぜ文字化けするのか原因がよく話からなった。
学校でのグループワークなので、別の人が作ったファイルでSystem.out.printlnしてみることに。
なぜか日本語で表示される。
あれ?むしろ前回これ作った人文字化けして見れないとか言ってなかった?
なぜ自分のローカルに構築したTomcatだと表示されるんだ?
というわけで、そのファイルの文字コードを調べてみた。
( ´゚д゚`)
意味が分からなかったが、とりあえず自分のClassファイルもSJISにしてみたら文字化けしなくなった。
そこでようやく合点がいった。
つまり、Tomcatが構築されている環境に依存してるってことか?
たしか
JSP → JAVA → Class → 実行 → 表示
って流れだったけど、JSPは文字コード指定してるから、そこからUnicodeに変換されるけど、Classファイルは変換されないってことか?
つまり
JSP(UTF-8) → 変換 → Java(Unicode) → Class(Unicode) → 実行 → 変換 → 表示(UTF-8)
という流れで、Classファイル自体は
Class(Unicode) → 実行 → 変換 → 表示(UTF-8)
という流れしかたどらないということなんだろうか?
ということは、ここでClassファイルをUTF-8にしていたら、Unicode→UTF-8変換は失敗するということになる。
で、謎がSJISだとうまくいっている点。
納得いかないままSJISに直して動作確認。
大学のサーバにアクセスしてアップロードすると文字化け。
というわけでEUC-JPに変換したら問題解消。
・・・ということは
Class(開発環境の文字コード) → 実行 → 変換 → 表示(UTF-8)
という風に変換されている、というよりそもそもTomcatを環境に合わせたものを使っているのだから当然と言えば当然……なんだろうか。
ぽにょ、文字コード、やだー。
ぽにょ、日本語、きらーい。
でも、英語も、きらーい。