postgresql字符编码问题

wangyuan2009 2013-04-17 09:00:00
服务器字符编码$LANG=utf8
服务器上postgresql数据库Test编码也为utf8

web服务器字符编码$LANG=euc-jp
web服务器上JSP文件编码格式也都是euc-jp

现在web服务器通过jdbc获取postgresql数据库的数据是乱码,不知道该怎么解决乱码问题?

要求:服务器字符编码$LANG=utf8,
服务器上postgresql数据库Test编码也为utf8,
web服务器字符编码$LANG=euc-jp
编码格式不能改动
...全文
485 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangyuan2009 2013-04-25
  • 打赏
  • 举报
回复
各位,问题已解决,谢谢各位的帮助,原因已找到,是因为我测试使用的postgresql jar版本过低,为pg72jdbc2.jar.而实际连接的数据库为postgresql 8.4.11,所以产生了乱码。现在匹配的jar包重新编译运行即可,连接时使用的类不同connection=>PGConnection
iihero 2013-04-24
  • 打赏
  • 举报
回复
response应该设置encoding为euc-jp. 无需在代码中进行转换吧。 你能帖一个完整的示例吗?
wangyuan2009 2013-04-24
  • 打赏
  • 举报
回复
我写了个小程序试验了下,但是输出java -jar tmp.jar > tmp.txt 输出到tmp.txt中的全是乱码,取出tmp.txt中一行乱码(我在*前已手动回车换行)如下所示:

*1*,蕭????C Ap16012#1(1-1)??C Ap16012#1(1-1) 10GbE?祉??激???
*2*,蕭????C Ap16012#1(1-1)??C Ap16012#1(1-1) 10GbE?祉??激???
*3*,??申鐃緒申鐃? Ap16012#1(1-1)鐃緒申C Ap16012#1(1-1) 10GbE鐃順?鐃緒申羶?申鐃緒申
*4*,蕭????C Ap16012#1(1-1)??C Ap16012#1(1-1) 10GbE?祉??激???
*5*,蕭????C Ap16012#1(1-1)??C Ap16012#1(1-1) 10GbE?祉??激???
*6*,?????C Ap16012#1(1-1)??C Ap16012#1(1-1) 10GbE??????????
*7*,?????C Ap16012#1(1-1)??C Ap16012#1(1-1) 10GbE??????????
另小程序代码如下:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException;


public class JDBCTest { 
    public static void main(String[] args) { 
    	String driver = "org.postgresql.Driver"; 
        String dbName = "数据库名"; 
        String passwrod = "密码"; 
        String userName = "用户名"; 
        String url = "jdbc:postgresql://postgresqlIP地址:5432/" + dbName;
        String sql = "select col from dbname"
  
        try { 
            Class.forName(driver); 
            Connection conn = DriverManager.getConnection(url, userName, 
                    passwrod); 
            PreparedStatement ps = conn.prepareStatement(sql); 
            ResultSet rs = ps.executeQuery(); 
            String r1 = "";
            String r2 = "";
            String r3 = "";
            String r4 = "";
            String r5 = "";
            String r6 = "";
           
            while (rs.next()) { 
            	//2
            	r1=new String(rs.getString(1).getBytes(), "EUC-JP");
            	//3
            	r2=new String(rs.getString(1).getBytes("UTF-8"), "EUC-JP");
            	//4
            	r3=new String(rs.getString(1).getBytes("EUC-JP"), "EUC-JP");
            	//5
            	r4=new String(rs.getString(1).getBytes("UTF-8"), "UTF-8");
            	//6
            	r5=new String(rs.getString(1).getBytes("EUC-JP"), "UTF-8");
            	//7
            	r6=new String(rs.getString(1).getBytes(), "UTF-8");
            	
                System.out.println( "*1*"+ rs.getString(1) + "*2*" + r1 + "*3*" + r2 
                		+ "*4*" + r3 + "*5*" + r4 + "*6*" + r5 + "*7*" + r6); 
            } 
  
            // 关闭记录集 
            if (rs != null) { 
                try { 
                    rs.close(); 
                } catch (SQLException e) { 
                    e.printStackTrace(); 
                } 
            } 
  
            // 关闭声明 
            if (ps != null) { 
                try { 
                    ps.close(); 
                } catch (SQLException e) { 
                    e.printStackTrace(); 
                } 
            } 
  
            // 关闭链接对象 
            if (conn != null) { 
                try { 
                    conn.close(); 
                } catch (SQLException e) { 
                    e.printStackTrace(); 
                } 
            } 
  
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
} 
wangyuan2009 2013-04-23
  • 打赏
  • 举报
回复
可是我还有个web服务器在postgresql数据库服务器 (服务器字符编码$LANG=utf8,服务器上postgresql数据库Test编码也为utf8) 上,如果使用set client_encoding='euc-jp' ,本机怎么连接? 另:set client_encoding='euc-jp' 已试过了,不可以的,还是乱码。 我想在web的代码中转码,代码如下:
while (resultSet.next()) {
                    String vlanName = new String(resultSet.getString("service_name").getBytes("UTF-8"),"EUC-JP");
但是界面显示还是乱码,现在还没搞定呢
iihero 2013-04-21
  • 打赏
  • 举报
回复
楼上正解,这样设置以后,可以自动转换。
clqaitxp 2013-04-18
  • 打赏
  • 举报
回复
获取之前设置set client_encoding='utf8' 试一下 最好还是统一用Utf8啊
trainee 2013-04-18
  • 打赏
  • 举报
回复
获取之前设置set client_encoding='euc-jp'

972

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧