免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7932 | 回复: 23
打印 上一主题 下一主题

冰天雪地裸体跪地求助!关于汉字编码的兼容性问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-04 16:21 |只看该作者 |正序浏览
各位老大,现在赶一个项目,遇到一个 棘手问题:

我在LINUX下用C(通过libpq)操作postgres数据库,测试时自己用C程序往表内写汉字(GBK编码),读取显示一切正常。

但在实际运行时,表内的汉字数据是由另外一个人做的一个网页JAVA程序写入的(JAVA程序用JAVA BEAN连数据库),我用C程序读取时全是乱码。而且用select 在控制台查看时所有汉字字段都是乱码!后来,JAVA程序在写入时也换了很多种编码格式,从ISO-8859-1,GB2312, UNICODE,JAVA程序读取一切正常,但我的C程序读出来根本不知道什么编码。怎么办?
  用libpq连接Postgres时有什么类似JDBC中的chatSet这种编码选项啊?

还有set client_encoding to ''这个有用么?

请各位前辈紧急援助一把,感激不尽了!!!

论坛徽章:
0
24 [报告]
发表于 2004-04-13 11:38 |只看该作者

冰天雪地裸体跪地求助!关于汉字编码的兼容性问题!

这其实就是一个编码对应的问题,我也曾经迷惑过!
控制台输入的汉字也是有编码方式的。
netkiller书中那个工具就能调整控制台解码方式。
我用的secureCRT却不可以。
另外,post可以进行做有限的转换(set client....)然后返回到客户端。

论坛徽章:
0
23 [报告]
发表于 2004-04-12 22:19 |只看该作者

冰天雪地裸体跪地求助!关于汉字编码的兼容性问题!

谢谢netkiller,问题解决了,locale的问题,lc_all设置为C后再initdb就好了。

论坛徽章:
0
22 [报告]
发表于 2004-04-12 21:23 |只看该作者

冰天雪地裸体跪地求助!关于汉字编码的兼容性问题!

控制台 的编码 PGCLIENTENCODING

client_encoding是API访问数据库里的编码。。

论坛徽章:
0
21 [报告]
发表于 2004-04-12 15:22 |只看该作者

冰天雪地裸体跪地求助!关于汉字编码的兼容性问题!

to netkiller,有没试过在shell下export PGCLIENTENCODING=GBK,或是在进入psql界面后set client_encoding='GBK';
再运行SQL语句:select '一'='两'; 看看结果是真是假?我在设置GBK后直接在客户端insert 的时候插入汉字'一'是正常的,能看到,而插入汉字'两'则看不到,如果select * from test where name='一',则name中为'一'的和那个看不到的'两'都被select 出来。你能不能实验下看看,因为不知道你测试的数据是怎么插入的。谢了!

论坛徽章:
0
20 [报告]
发表于 2004-04-12 14:10 |只看该作者

冰天雪地裸体跪地求助!关于汉字编码的兼容性问题!

export PGCLIENTENCODING=GBK
是psql 的编码.

set client_encoding='GBK';
是将数据库 select 时出来的数据转为...

UTF-8 向下兼容 GB18030 ->; GBK ->;GB2312

论坛徽章:
0
19 [报告]
发表于 2004-04-12 11:11 |只看该作者

冰天雪地裸体跪地求助!关于汉字编码的兼容性问题!

另外,我很惊奇,你在不同的字符集下竟然都能正确显示同一条记录里的中文,我很想知道你是在什么状况下插入的这些记录

我目前的测试结果是:
在GBK下插入的记录,在GB18030下能正确显示,在utf-8下显示为乱码

在GB18030下插入的记录,在GBK下能正确显示,在utf-8下显示为乱码

在utf-8(或UNICODE)下插入的记录,在GBK下显示为乱码,在GB18030下显示为乱码

论坛徽章:
0
18 [报告]
发表于 2004-04-12 10:52 |只看该作者

冰天雪地裸体跪地求助!关于汉字编码的兼容性问题!


谢谢你做的这些测试

不过可惜,你还是没能明白我们遇到的问题
请注意,在shell下export PGCLIENTENCODING=GBK,或是在进入post后set client_encoding='GBK';
然后,请测试这么一个语句:select '一'='两';

还有,我并没有置疑国家gb组织或是post的打算
我是linux和post的新手,对字符集也不甚了解
我只是在应用中碰到了一些很奇异的问题
想知道是怎样产生这些错误的,该怎样避免

再有,请原谅我为什么一定要坚持用GBK字符集
因为我们的应用是基于GBK的
当然,如果我所提出的这个错误不是我偶尔犯下的,而是确实存在的话
那么,我会考虑在前端应用(java)中换一种字符集

再次谢谢你的关注!

论坛徽章:
0
17 [报告]
发表于 2004-04-12 10:15 |只看该作者

冰天雪地裸体跪地求助!关于汉字编码的兼容性问题!

netkiller=# set client_encoding = 'GB18030'

netkiller=# select * from diy.category where name='一';
id | product_id | name | description |       created
----+------------+------+-------------+---------------------
  9 |          1 | 一   | 两          | 2004-04-12 10:00:39
(1 row)

netkiller=# select * from diy.category where name='两';
id | product_id | name | description |       created
----+------------+------+-------------+---------------------
10 |          1 | 两   | 一          | 2004-04-12 10:00:47
(1 row)

netkiller=#

这些例子够不够...哈哈. 如果"一","两" 你可以去找国家GB组织..说它们汉字编码有问题.全国上下.全部升级汉字系统... 哈哈..

论坛徽章:
0
16 [报告]
发表于 2004-04-12 10:12 |只看该作者

冰天雪地裸体跪地求助!关于汉字编码的兼容性问题!

netkiller=# set client_encoding = 'GBK'

netkiller=# select * from diy.category where name='两';
id | product_id | name | description |       created
----+------------+------+-------------+---------------------
10 |          1 | 两   | 一          | 2004-04-12 10:00:47
(1 row)

netkiller=# select * from diy.category where name='一';
id | product_id | name | description |       created
----+------------+------+-------------+---------------------
  9 |          1 | 一   | 两          | 2004-04-12 10:00:39
(1 row)

netkiller=#
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP