Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

文字化けについて

こんにちは、度々すみませんが
javaの文字化けについて教えていただきたいことがあります。
今servletの勉強をしています。
簡単な掲示板を作りました。

BBSServlet.java 掲示板の表示と処理
MessageLog.java ユーザ名とメッセージの管理
log.dat XML形式で名前とメッセージと記録

コードは下記通り
BBSServlet.java

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.*;

import java.io.*;
import java.beans.XMLEncoder;
import java.beans.XMLDecoder;
import java.util.*;

public class BBSServlet extends HttpServlet {
private PrintWriter out;
private File file;
final static String PATH = "WEB-INF/log.dat";
private List list ;
public void init(){
file = getFile();
list = new Vector();
if(file.exists()){
try{

//log.datから読み込み
InputStream in = new FileInputStream(file);
XMLDecoder obj = new XMLDecoder(in);
list = (List)obj.readObject();
obj.close();
}catch(Exception e){
e.printStackTrace();
}
}
    
public void doGet(HttpServletRequest ret,HttpServletResponse rep)
throws ServletException,IOException{
        
ret.setCharacterEncoding("Shift_JIS");
String name = ret.getParameter("name");
String message = ret.getParameter("message");
        
rep.setContentType("text/html");
rep.setCharacterEncoding("Shift_JIS");
out = rep.getWriter();
out.print("<html><head><title>これはテストページ</title></head><body>");
out.print("<h3>掲示板の練習です</h3>");
out.print("<form action=\"\">");
out.print("お名前:<input type=\"text\" name=\"name\"><br>");
out.print("メッセージ:<input type=\"text\" name=\"message\"><br>");
out.print("<input type=\"submit\" value=\"発言\">");
out.print("</form>");
if(message != null){
MessageLog log = new MessageLog();
log.setName(name);
log.setMessage(message);
list.add(log);
}
System.out.println(list.size());
for(int i = list.size()-1;i>=0;i--){

//発言記録を表示

MessageLog log = (MessageLog)list.get(i);
out.print("お名前 :"+log.getName()+" メッセージ :"+log.getMessage()+"<br>");
}
out.print("</body></html>");
}
public void destroy(){
file = getFile();
try{

//log.datに書き込み

OutputStream out = new FileOutputStream(file);
XMLEncoder obj = new XMLEncoder(out);
obj.writeObject(list);
obj.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}
}
private File getFile(){
String file_path = getServletContext().getRealPath(PATH);
return new File(file_path);
}
}

MessageLog.java

public class MessageLog {

private String name;
private String message;
     
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

問題は[発言の記録表示]部分はブラウザ上で文字化けしてしまうんです 泣
なぜでしょうか?
よろしくお願いします。

2

回答

4353

閲覧

2件の回答

評価

0

>out.print("お名前 :"+log.getName()+" メッセージ :"+log.getMessage()+"<br>");

の getName(), getMessage()の部分をシフトJISに変換してからprintしてみては?

評価

0

お返事ありがとうございます。
new String(log.getName().getBytes("8859_1"),"Shift_JIS")

上記のようなやり方で文字化けを解決しました。
ありがとうございました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。