Delphi2010 开发unicode多语言程序,存取乱码,数据库为Oracle11G

hongyidaxia2 2012-04-19 03:43:46
操作系统:Win2003 简体中文环境
数据库:ORacle 11G, 字符集为AL32UTF8,应用程序Oracle客户端字符集也设为AL32UTF8
开发工具:Delphi2010
状况描述:

(1)使用ADOQuery 查询通过 ORacle SQL Developer插入的泰文,显示为乱码。插入泰文时,存入数据库的为问号,因为Oracle客户端和服务器字符集一致,所以在存储时,两边的字符集未做转换,显示为问号,可能是操作系统不识别泰文,在编辑框中输入泰文是没有问题的,这一块不清楚是如何转换的。

(2)通过select dump(字段)from 表名,看到的实际存储值为63,存入中文时,存入的内容为非unicode字符,应该是ansi简体中文编码的,例如,存入中文”汉“,数据库存储的是两个字节,通过ORacle SQL Developer存入"汉"这个汉字,占用的是3个字节,Delphi在存储、读取utf8编码的数据,是不是需要通过一些函数进行转换?

(3)查找资料说Delphi2010默认是unicode的,但我这样简单使用写出的程序应该不是unicode的,我将区域与语言选项时,非unicode程序的默认显示语言修改为泰文,Oracle客户端字符集设为泰文字符集,这样字符集转换由Oracle数据库来进行,是可以正确的存取泰文,但是存取中文则编程了乱码。我想知道的是如何使用Delphi2010编写真正的unicode程序,用户不用做任何变动,即可存取各种文字。
...全文
730 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongyidaxia2 2012-04-24
  • 打赏
  • 举报
回复
咋成打架贴了,结贴了
山东蓝鸟贵薪 2012-04-23
  • 打赏
  • 举报
回复
我最起码也遇到这种问题“乱码”
开发环境是
在MYSQL+DELPHI编程时,就是必须设置“字符集为GT2312”的,
否则中文信息就会显示为:???

cm2004
(贫下中农)
你好像就是针对我以后,再好像也没有说出个1,2,3呀
“奇怪了呀,难道你不是高手???”
山东蓝鸟贵薪 2012-04-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
引用 4 楼 的回复:

泰文 能用 GB2312 ?
明显是来灌水的


sgzhou12345
(小蓝鸟贵薪)

他确实除了灌水别的就什么都不会了
[/Quote]
cm2004

(贫下中农)
是吗,那你都会什么呀,出来先帮楼主解决一下这个“问题”吧
cm2004 2012-04-23
  • 打赏
  • 举报
回复
更正下:DELPHI是否支持unicode 应该是程序是否支持UNICODE或者程序使用的char或者string等是否为wide

顺便再说一句,本人很菜,但是也不至于菜到能够理直气壮的告诉别人泰文应该使用GB2312,真不知道某些人胸前的瓶盖是怎么来的,真的是技术分吗?
cm2004 2012-04-23
  • 打赏
  • 举报
回复
本人不会的问题从来不会去回答,更不会在技术区回“我来帮你顶一下”,“我是来学习”之类无聊的灌水骗分帖,要灌水请去非技术区,谢谢
cm2004 2012-04-23
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

我最起码也遇到这种问题“乱码”
开发环境是
在MYSQL+DELPHI编程时,就是必须设置“字符集为GT2312”的,
否则中文信息就会显示为:???

cm2004
(贫下中农)
你好像就是针对我以后,再好像也没有说出个1,2,3呀
“奇怪了呀,难道你不是高手???”
[/Quote]

本人从未说过自己是高手,只是看不惯某些人在技术区灌水骗分来着,另外谁告诉你MYSQL + DELPHI字符集必须是GB2312(小弟不才不知道你说的GT2312是什么字符集,索性我就给改成GB2312吧)才能正常显示中文? 拖出来赏他两大巴掌。SQL的字符集,数据库连接字符集,DELPHI是否支持unicode,操作系统的字符集(DELPHI支持UNICODE且系统支持UNICODE的情况下可以不考虑这点)这4点直接关系是否能正常显示中文
hongyidaxia2 2012-04-23
  • 打赏
  • 举报
回复
应该怎么转换呢?我看取出来的数据已经变了,跟数据库实际存储的不一致了
hongyidaxia2 2012-04-23
  • 打赏
  • 举报
回复
根据盒子网友的回复,将数据库控件换成uniDAC,可以正常的获取存储为utf8格式的数据,但直接存入时,会出现无法识别的问题,数据存储为问号(?),后修改插入语句,改成ParamByName方式,可以正常存储。
cm2004 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

泰文 能用 GB2312 ?
明显是来灌水的
[/Quote]

sgzhou12345
(小蓝鸟贵薪)

他确实除了灌水别的就什么都不会了
「已注销」 2012-04-20
  • 打赏
  • 举报
回复
就是unicode本身,也包含很多种编码类型unicode只是一个大的范围。
「已注销」 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

窗体和输入控件还要设置字符集?我的TEdit输入控件,字符集是默认的DEFAULT_CHARSET,是可以输入中文、泰文、俄文、日文、韩文等各种文字的。
[/Quote]

delphi 2010的default_charset应该是UTF-16,你直接将utf-16的值不经转换放入AL32UTF8中自然是错误的。
hongyidaxia2 2012-04-20
  • 打赏
  • 举报
回复
恩,你用的应该是Delphi2009一下版本吧,那些如果不是简体中文操作系统,确实会出现这个问题。
山东蓝鸟贵薪 2012-04-20
  • 打赏
  • 举报
回复
这个就不清楚了,但是我在MYSQL+DELPHI编程时,就是必须设置“字符集为GT2312”的,
否则中文信息就会显示为:???的
hongyidaxia2 2012-04-20
  • 打赏
  • 举报
回复
窗体和输入控件还要设置字符集?我的TEdit输入控件,字符集是默认的DEFAULT_CHARSET,是可以输入中文、泰文、俄文、日文、韩文等各种文字的。
「已注销」 2012-04-20
  • 打赏
  • 举报
回复
数据库字符集,oracle客户端字符集,delphi窗体及输入控件所使用的字符集都要一致。delphi2010使用的unicode默认应该不是utf8的,因此要做转换。
hongyidaxia2 2012-04-20
  • 打赏
  • 举报
回复
没有人遇到过这个问题吗?
山东蓝鸟贵薪 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
泰文 能用 GB2312 ?
明显是来灌水的
[/Quote]
你呀,那就不能写“中文”了吗
只要字体库中有的,就能显示出“中文”的
晕..............
hongyidaxia2 2012-04-20
  • 打赏
  • 举报
回复
我用ADOQuery1.Fields[1].AsBytes查看字节流,发现值为(224, 185, 134, 224, 185, 134, 224, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),而数据库中存储的应为(224, 185, 134, 224, 185, 134, 224, 185,134),存的是泰文字符“ๆ”,数据库定义的该字段李类型为varchar2(20)。这说明在读取的时候字节被丢失转换了吧。
wzca 2012-04-19
  • 打赏
  • 举报
回复
泰文 能用 GB2312 ?
明显是来灌水的
山东蓝鸟贵薪 2012-04-19
  • 打赏
  • 举报
回复
字集应该选择GB2312的
加载更多回复(2)

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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