BCB/Delphi连接Sybase(编码格式为UTF8,chinese),数据库中已存在的中文,读出为乱码!(200分)

  • 主题发起人 主题发起人 fzzf
  • 开始时间 开始时间
F

fzzf

Unregistered / Unconfirmed
GUEST, unregistred user!
主要是为了支持多语言而遇到的问题!目前有使用BCB、java连接同一个客户端,现在确定sysbase数据库使用utf8编码格式,在java中有一种方式可以处理:就是在存入数据库的时,将编码转换成utf8,这样就可以正常写入,不会乱码。<br>不知各位大虾是如何实现delphi中的这种转换关系的。谢谢!<br>另外如果不做转换的话,用bcb写入什么,读出的也是正常的,就是数据库中没法看到!<br>还有现在程序已经基本成型,都是什么BDE这组控件读写数据库,所以太大的改动就不太适应!<br><br>目前尝试过的方法(当前使用的连接sybase的方法是BDE-&gt;ODBC-&gt;Sybase):<br>1、修改ODBC的连接字符集为UTF8:导致结果是在运行期有些字段根本读不到<br>2、使用Sybase的多种编码查看方式都不行!(比如963+chinese,860+chinese,utf8+chinese)
 
UTF8Encode() <br>UTF8Decode()
 
你说的我也试过了,是可以读出,不过我使用Query控件的每个String都要转换一次,工作量很大!能不能有一个在中间就同一转换的方式呢?<br><br>谢谢!
 
自带的DBGrid控件是不支持Unicode字符显示的(自带的显示控件都不支持Unicode),你可以换成Tnt控件来显示,数据库连接控件是支持Unicode的
 
to:lxw5214<br><br>你说的好像不正确,DBGrid只是显示DataSet中的数据而已,其实DataSet获得数据就不是UTF8的,所以你并没有找到真正的原因!<br><br>如果另有方法,还往继续发表!<br>谢谢各位!
 
我用ADO链接数据库,用TntDBGrid显示,在俄语环境中哈萨克斯坦文中那几个Unicode字符,没问题。没研究过DataSet,你可以先试试,不行再说
 
我大概看了一下,DataSet中存储字段值的好像是Variant类型,如果是这样的话,他是支持Unicode类型的,只是在DBGrid中,把数据转为了string类型显示,所以不支持Unicode
 
我刚下了一个TNT安装看了一下,tnt支持的Unicode。不过到目前为止还不知道重载的一些Field是如何使用的,比如如何加入到对应的DataSet中的,也许你有工具!<br><br>但是我现在换控件是不可能的了,我也试了一下,修改了vcl的相关源码,将我需要的字段处理了一下,比如:<br>DB.pas 的TStringField的SetAsString增加了一句Result := UTF8Decode(Result);<br>DBTables.pas的ExecSQL函数也同样增加了一句FSQL.Text = UTF8Encode(FSQL.Text);<br><br>这样基本解决了问题,不过是现在要将DB.pas,DBTables.pas,DBGrid.pas三个文件加入到我的工程中一起编译,并且不能使用“build with runtime”选项!
 
现在有出现了一个新的问题,找了很多资料没有办法解决!<br><br>在使用UTF8Encode()进行编码的时候,如果其中包含中文的SQL语句,就会将对应的'号处理掉,导致SQL语句语法错误!<br><br>例如:<br>//这里的汉字总数是3个(即:奇数个),并且与汉字结尾,如果是偶数个就不会有这个问题<br>lsTemp = '我程序' &nbsp;<br>lsTemp = UTF8Encode(lsTemp);<br>这时lsTemp 就变成:'鎴戠▼搴?<br>注意就是后面的分号不见了,所以在执行的时候就报SQL语法不正确<br><br>做过这方面研究的还不吝赐教!<br>分不够可以另外开帖加分!!!!!
 
后退
顶部