弁財天

ゴフマン「専門家を信じるのではなく、自分自身で考えて判断せよ」

PostgreSQLの文字化け

データ移行時は、iconvを使わずに
psqlにエンコーディングを設定をして、PostgreSQLバックエンドに文字コード変換させる

\encoding sjis
insert into 表名 values('SJISのデータ',...);
...
これを見る限り、jdbcで文字化けは起きない

 

jdbc:postgresql://localhost/mydb?charSet=EUC-JP
とか
Connection conn = DriverManager.getConnection(
"jdbc:postgresql://localhost/mydb?charSet=UTF-8", "postgres", "");
Statement stmt = conn.createStatement();
stmt.executeUpdate("set client_encoding to 'UTF-8'");
とか

 

実際テストコードを書いてみると、文字化けない
insert into test values('まる数字①②③', '2009/09/11');
insert into test values('ローマ字ⅠⅡⅢ', '2009/09/11');
insert into test values('なみ〜', '2009/09/11');
insert into test values('マイナス−', '2009/09/11');
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Select {
public static void main(String args[]) {
String url = "jdbc:postgresql://localhost/test";
Connection con = null;

try {
String driver = "org.postgresql.Driver";

Class.forName(driver).newInstance();
} catch (Exception e) {
System.out.println("Failed to load SQL driver.");
return;
}
try {
con = DriverManager.getConnection(url, "postgres", "");
Statement select = con.createStatement();
ResultSet result = select
.executeQuery("SELECT * FROM test");

System.out.println("Got results:");
while (result.next()) {
System.out.println("" + result.getString(1));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (con != null) {
try {
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

 

これ
response.setContentType("text/plain; charset= Windows-31J ");
PrintWriter out =response.getWriter();
以下のようにPrintWriterのエンコーダ(コンバータ)をCp943Cに指定することで文字化けを防ぐことができます。
response.setContentType("text/plain; charset= Windows-31J ");
PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(),"Cp943C"));
※なお、このようにPrintWriterをNewで作成した場合、かならずPrintWriterオブジェクトをclose()メソッドで明示的に閉じてください。そうしないとブラウザに書き出す前に処理が終了してしまい、何も表示されないことがあります。

 

requestのコンバータについてもCp943CをsetCharacterEncodingで指定します。

request.setCharacterEncoding("Cp943C");

 

JspのエンコーディングをCp943Cにする設定

<%@ page contentType="text/html;charset=Cp943C" %>
<%@ page pageEncoding="Cp943C" %>
で、まる数字の
①②③
とかローマ数字の
ⅠⅡⅢ
は表示できるようになる

 

文字コード

投稿されたコメント:

コメント
コメントは無効になっています。