大大们:
我们项目中新使用了postgresql数据库.
看他的服务器配置 字符集编码client_encoding 是SQL_ASCII
之前没使用过这种编码. 今天用pg数据的客户端插入一些中文进去之后,
使用pg自带的查询器查询是中文.
不过使用java程序读的时候,就是乱码了.. 这种情况,怎么转码,从数据库到java.
[b]问题补充:[/b]
数据库不是我能控制的撒...
[b]问题补充:[/b]
偶的java类文件编码是UTF-8
数据库是sql_ascii.
如果向数据库插入中文的话. 是乱码.
String str = "中文";
str = new String(str.getBytes("ascii"),"UTF-8");
也不行
[b]问题补充:[/b]
感动呵~
我大概明白你的意思的了. 在存取的时候, 把字符集在目标字符集和ascii字符集之间转换.
你的方法我试过了~ 非常遗憾,仍没能解决问题.
明天找下DBA, 试图让他来帮我解决办法,或者说法他~ 呵~
[b]问题补充:[/b]
DBA尝试了下UTF-8的数据库, 对java的存取中文是OK的.
不过从老数据库要迁移数据过来的时候, 数据库挂掉了.
正在处理问题中..
数据库导出的文件里的语句里 应该有创建表时候指定的字符集吧 是在不行 把数据库文件里的字符集都改了 再导入 。。。但是要是文件很大的话 就得切分文件再修改了 要不以文本形式打不开 太大了
不要用SQL_ASCII, 用UNICODE
http://www.pgsqldb.org/pgsqldoc-cvs/multibyte.html
乱码问题主要来源于字符集统一 比如说你要读取的时候 你可以以流的形式传递byte数组 最后 用String有一个可以指定byte数组字符编码的构造器 String(byte[],charset) eg: String a = new String(target.getBytes("ascii"),"gbk");
String str = "中文";
str = new String(str.getBytes("ascii"),"UTF-8");
这是从数据库取时候用的 如果是插入的话 应该是str = new String(str.getBytes(),"ascii");然后再把str插入 要是还不行的话 就转成iso8850-1实验下
最好的办法是改数据库的编码啊 在创建的时候指定字符集 在创建表的时候也指定字符集 。。。。
发错了 iso8859-1
问题解决了么? 问DBA了么?最后是怎么弄的?