JSPからServlet変換時に文字化け
もう2月です。1月はあっという間に終わりました・・・。
そんなこんなで今は、もともとWindows+Oracleで動いていたJSPのシステムをLinux+MySQLに移行してたりするわけなんだけど、まともに動かない。
OracleとMySQLの差を埋めることはしたんだけど、その他に、WindowsとLinuxで扱いが違うという点でちょっと苦戦中。
具体的には、Windowsで動いていたシステムではダブルクォーテーションは「\」でエスケープされていたのね。
で、自分は実際にWindowsで稼働している状態を見たことが分からないけど、一応、そのソースで問題なく動いていたらしい。
ところがLinux上ではそのエスケープが逆に問題になっている。
例えば
String strText = null;
strText = "<a href=\"http://www.kgworks.net/blog/\">KGWORKS.NET | BLOG</a>";
out.println(strText);
これだと、Syntax errorになっちゃう。
でもこうすると大丈夫。
String strText = null;
strText = "<a href='http://www.kgworks.net/blog/’>KGWORKS.NET | BLOG</a>";
out.println(strText);
こんな感じで、バックスラッシュを使わなければ特に問題ない。
ちなみに先頭部分で
<%@ page language="java" contentType="text/html; charset=EUC-JP"
pageEncoding="EUC-JP"%>
という宣言を行っていて、ファイル自体もEUC-JPで保存してる。
で、JSPからServletに変換する時に化けるのか、ServletからJavaにコンパイルする時に化けるのかという点を確認するために、work以下のファイルの覗いてみると、JSPからServletに変換する段階で化けてた。
strText = "<a href=<EF><BE><A5>"http://www.kgworks.net/blog/<EF><BE><A5>"><E3><83><86><E3><82><B9><E3><83><88></a>";
↑こんな感じ
ぐぐった中の内容に、「\」を使わなきゃいいという回答もあったんだけど、そうもいかないだろうと。
Java系って内部処理はデフォルトでUTF-8だった気がするので、そこら辺が絡んでくるのかな。
Javaの経験は無いに等しいけど、根本的な部分を探れば解決しそう・・・。
というか解決してほしい。
Tags: Java
この記事へのコメント
まだコメントはありません
この記事にコメントする
Profile
-
宮川恵次(Keiji Miyakawa)
フリーでシステム開発やインフラ構築等を行っています。
