delphi6读取oracle乱码,用ADO取数据时中文是乱码,但Debug中Delphi可以正确显示,请大家支支招 ( 积分: 100 )...

现在问题的关键是如何把这些4字节编码的汉字转成2字节的Unicode或GB码。

我做了个试验,在SQLServer中新建了一个nvarchar字段,然后用Delphi程序把字符串'欧式平头按摩花洒头+插座组[泰式]'写入,用

select convert(varbinary(4000), field_name) from table_name

看到存储内码是:0x276B0F5F735E345909636964B182126D34592B00D263A75EC47E5B00F06C0F5F5D00

这是正常的2字节Unicode。

在Delphi的Debug中,Hint显示:

FieldByName('Name').value = ''s4i?4+咬腫?]' //乱码

Hint显示: FieldByName('Name').AsString = '欧式平头按摩花洒头+插座组[泰式]' //正常

就是说,正常的Unicode用FieldByName('Name').AsString可以自动转换,FieldByName('Name').value的Variant类型是VarOleStr,在TVarData(v).VOleStr中存储的就是'欧式平头按摩花洒头+插座组[泰式]';

而对于4字节存储的字段,在Delphi的Debug中,Hint显示:

FieldByName('Name').value = '欧式平头按摩花洒头+插座组[泰式]' //正常

FieldByName('Name').AsString = '?·ê???í·°′?|?¨è÷í·+2?×ù×é[ì?ê?]' //乱码

FieldByName('Name').value的Variant类型也是VarOleStr,在TVarData(v).VOleStr中存储的是'?·ê???í·°′?|?¨è÷í·+2?×ù×é[ì?ê?]'

请熟悉字符集编码或Delphi源码的朋友指教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值