textbox

IT博客 联系 聚合 管理
  103 Posts :: 7 Stories :: 22 Comments :: 0 Trackbacks
看到DB.pas 里面的
procedure TStringField.SetAsString(const Value: string);
begin
  SetAsAnsiString(AnsiString(Value)); //这个就叫做支持unicode.......所有的unicode string 到传到了里面全变成了ansi 字符.害的我在繁体系统里读取简体unicode 文件全是乱码.纳闷.
end;
你的string是unicode没错,可是你的vcl又有多少是ansi做核心编码的???看到上面的语句真有点浪费我的时间.
本来以为是vcl代码不一致的问题导致,可是看到cpu里面的代码就确认是传进去的unicode 竟然被转成ansi 了.能不乱码.一个简体unicode在繁体系统里面能不乱吗??????哎!!默哀.

TStringField.SetAsString:
004F85A8 55               push ebp
004F85A9 8BEC             mov ebp,esp
004F85AB 6A00             push $00
004F85AD 53               push ebx
004F85AE 56               push esi
004F85AF 8BF2             mov esi,edx
004F85B1 8BD8             mov ebx,eax
004F85B3 33C0             xor eax,eax
004F85B5 55               push ebp
004F85B6 68F3854F00       push $004f85f3
004F85BB 64FF30           push dword ptr fs:[eax]
004F85BE 648920           mov fs:[eax],esp
004F85C1 8D45FC           lea eax,[ebp-$04]
004F85C4 8BD6             mov edx,esi
004F85C6 B900000000       mov ecx,$00000000
004F85CB E844F2F0FF       call @LStrFromUStr
004F85D0 8B55FC           mov edx,[ebp-$04]
004F85D3 8BC3             mov eax,ebx
004F85D5 8B08             mov ecx,[eax]
004F85D7 FF91EC000000     call dword ptr [ecx+$000000ec]   //TStringField.SetAsAnsiString:
004F85DD 33C0             xor eax,eax
004F85DF 5A               pop edx
004F85E0 59               pop ecx
004F85E1 59               pop ecx
004F85E2 648910           mov fs:[eax],edx
004F85E5 68FA854F00       push $004f85fa
004F85EA 8D45FC           lea eax,[ebp-$04]
004F85ED E8A2E2F0FF       call @LStrClr
004F85F2 C3               ret
004F85F3 E914D9F0FF       jmp @HandleFinally
004F85F8 EBF0             jmp $004f85ea
004F85FA 5E               pop esi
004F85FB 5B               pop ebx
004F85FC 59               pop ecx
004F85FD 5D               pop ebp
004F85FE C3               ret
004F85FF 90               nop 

看来还是得使用TWideStringField 了


 
posted on 2011-03-04 17:41 零度 阅读(1580) 评论(1)  编辑 收藏 引用 所属分类: delphi

Feedback

# re: delphi2010 你完全支持unicode怎么那么多陷阱啊 2013-08-14 17:08 巫师
varchar是不支持unicode的。varchar对应的前台字段对象是TStringField。
nvarchar支持unicode,nvarchar前台对应的字段对象是TWideStringField  回复  更多评论
  

只有注册用户登录后才能发表评论。