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
编码格式不能改动
...全文
457 7 打赏 收藏 转发到动态 举报
写回复
用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'
PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。 PostgreSQL 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。 事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。 本课程作为PostgreSQL数据库管理一,主要讲解以下内容:1.     PostgreSQL安装和环境准备2.     PostgreSQL数据查询3.     PostgreSQL 数据过滤4.     PostgreSQL 多表的联接5.     PostgreSQL数据的分组6.     PostgreSQL合集的操作7.   PostgreSQL 合集的分组

956

社区成员

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

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