操作系统: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程序,用户不用做任何变动,即可存取各种文字。

解决方案 »

  1.   

    字段应该是widestring类型才可以,oracle里也要设置为宽字符串。
      

  2.   

    数据库的字符集为AL32UTF8,是宽字符啊,Delphi2010默认就是支持unicode的,不用设为WideString吧,我将数据集TClientDataSet里的字段设为WideString,查询的时候也是乱码
      

  3.   

    数据库字符集,oracle客户端字符集,delphi窗体及输入控件所使用的字符集都要一致。delphi2010使用的unicode默认应该不是utf8的,因此要做转换。
      

  4.   

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

  5.   

    这个就不清楚了,但是我在MYSQL+DELPHI编程时,就是必须设置“字符集为GT2312”的,
    否则中文信息就会显示为:???的
      

  6.   

    恩,你用的应该是Delphi2009一下版本吧,那些如果不是简体中文操作系统,确实会出现这个问题。
      

  7.   


    delphi 2010的default_charset应该是UTF-16,你直接将utf-16的值不经转换放入AL32UTF8中自然是错误的。
      

  8.   

    就是unicode本身,也包含很多种编码类型unicode只是一个大的范围。
      

  9.   


    sgzhou12345
    (小蓝鸟贵薪)他确实除了灌水别的就什么都不会了
      

  10.   

    我用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)。这说明在读取的时候字节被丢失转换了吧。
      

  11.   

    我最起码也遇到这种问题“乱码”
    开发环境是
    在MYSQL+DELPHI编程时,就是必须设置“字符集为GT2312”的,
    否则中文信息就会显示为:???cm2004
    (贫下中农)
    你好像就是针对我以后,再好像也没有说出个1,2,3呀
    “奇怪了呀,难道你不是高手???”
      

  12.   

    根据盒子网友的回复,将数据库控件换成uniDAC,可以正常的获取存储为utf8格式的数据,但直接存入时,会出现无法识别的问题,数据存储为问号(?),后修改插入语句,改成ParamByName方式,可以正常存储。
      

  13.   


    本人从未说过自己是高手,只是看不惯某些人在技术区灌水骗分来着,另外谁告诉你MYSQL + DELPHI字符集必须是GB2312(小弟不才不知道你说的GT2312是什么字符集,索性我就给改成GB2312吧)才能正常显示中文?  拖出来赏他两大巴掌。SQL的字符集,数据库连接字符集,DELPHI是否支持unicode,操作系统的字符集(DELPHI支持UNICODE且系统支持UNICODE的情况下可以不考虑这点)这4点直接关系是否能正常显示中文
      

  14.   

    更正下:DELPHI是否支持unicode  应该是程序是否支持UNICODE或者程序使用的char或者string等是否为wide顺便再说一句,本人很菜,但是也不至于菜到能够理直气壮的告诉别人泰文应该使用GB2312,真不知道某些人胸前的瓶盖是怎么来的,真的是技术分吗?