- PR -

テーブルのアップロードで文字化け

1
投稿者投稿内容
たんぼぼ
会議室デビュー日: 2004/05/26
投稿数: 17
お住まい・勤務地: 東京
投稿日時: 2005-04-20 13:09
データベースにテーブルの内容をアップするプログラムを
作りましたが(某書籍参照)日本語のみ文字化けをするので
対処方法が見つかりません。
申し訳ありませんが、教えて下さい。
読込んだデータを変換しないといけないのは分かるんですが・・・。

通常、フォームから読込んだデータはエンコードして
文字化けは、起きないようにしているのですが、
ファイルになっているので??


アップしたTXT(タブ区切り)は、
--------------------
 1 aaaあああ
--------------------
↓結果
--------------------
 1 aaa???
--------------------
です。

環境

os:redhat9
db:postgres7.4.7(EUC-JP)
tomcat



---------------------------------  以下ソースファイル  ----------------------------------------

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.Properties;
import java.util.StringTokenizer;

import javax.mail.BodyPart;
import javax.mail.Session;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DB extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int i, intDat = 0, intErr = 0;
String strDat = null;
response.setContentType("text/html;charset=Shift_JIS");
PrintWriter out = response.getWriter();
Connection conn = null;
PreparedStatement prst = null;

try {
ServletContext application = getServletConfig().getServletContext();
ServletInputStream objInp = request.getInputStream();
ByteArrayOutputStream objBops = new ByteArrayOutputStream();
PrintStream objPStr = new PrintStream(objBops, true);
objPStr.print("Content-Type: " + request.getContentType());
objPStr.println(System.getProperty("line.separator"));
while ((i = objInp.read()) != -1) {
objBops.write(i);
}
Properties objPrp = System.getProperties();
Session objSes = Session.getDefaultInstance(objPrp);
MimeMessage objMsg = new MimeMessage(objSes, new ByteArrayInputStream(objBops.toByteArray()));
BodyPart objBP = ((MimeMultipart) objMsg.getContent()).getBodyPart(0);
InputStreamReader objIS = new InputStreamReader(objBP.getInputStream());
BufferedReader objBR = new BufferedReader(objIS);
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection("jdbc:postgresql:**********", "********", "**********");
prst = conn.prepareStatement("INSERT INTO list_busyo(id_busyo,name_busyo) VALUES(?,?)");


out.println("<html><head><title>処理結果</title></head><body>");
out.println("<h1>アップロード処理結果</h1><hr />");
out.println("<p>以下のデータについて、エラーが発生しました</p>");
out.println("<table border='0'>");
out.println("<tr style='background:#CCddFF'><th>エラー行</th>");
out.println("<th>エラーメッセージ</th><th>投入データ</th></tr>");
while (objBR.ready()) {
try {
strDat = objBR.readLine();
StringTokenizer objTkn = new StringTokenizer(strDat, "\t");
ArrayList objAry = new ArrayList();
while (objTkn.hasMoreTokens()) {
objAry.add(objTkn.nextToken());
}
Object[] aryData = objAry.toArray();
prst.setInt(1, Integer.parseInt((String) aryData[0]));
prst.setString(2, (String) aryData[1]);
prst.executeUpdate();

} catch (Exception e) {
++intErr;
out.println("<tr>");
out.println("<td align='right'>" + (intDat + 1) + "行</td>");
out.println("<td>" + e.getLocalizedMessage() + "</td>");
out.println("<td>" + strDat + "</td>");
out.println("</tr>");
}
++intDat;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
out.println("</table><p><b>" + intDat + "</b>件のデータ中、<b>");
out.println(intErr + "</b>件のエラーが発生しました</p>");
out.println("</body></html>");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2005-04-20 13:52
ファイルの文字コードが書いてないので、とりあえずEUC-JP想定で書きますが……

コード:
InputStreamReader objIS = new InputStreamReader(objBP.getInputStream()); 





コード:
InputStreamReader objIS = new InputStreamReader(objBP.getInputStream(), "EUC-JP"); 



こんな感じで修正すればうまくいったりしませんか?
たんぼぼ
会議室デビュー日: 2004/05/26
投稿数: 17
お住まい・勤務地: 東京
投稿日時: 2005-04-20 17:11
永井和彦様

ありがとうございます、うまくいきました!!

これで何とかデータベースにアップ出来ます。
1

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