Sí, lo entendió correctamente. Esto es el VCL y su documentación que están rotos. ¡Tu confusión tiene mucho sentido!
En el 2009+ aplicación Delphi, usted tiene que utilizar AsString
propiedad de AnsiString
y AsWideString
para string=UnicodeString
.
De hecho, los As*String
propiedades se definen como tal:
property AsString: string read GetAsString write SetAsString;
property AsWideString: UnicodeString read GetAsWideString write SetAsWideString;
property AsAnsiString: AnsiString read GetAsAnsiString write SetAsAnsiString;
Cómo en la tierra que seamos capaces de descubrir que devuelve un AsString
AnsiString
? Simplemente no tiene sentido en absoluto, en comparación con el resto de la VCL/RTL.
La aplicación, que utiliza TStringField
clase para AnsiString
y TWideStringField
para string=UnicodeString
está roto.
Además, la documentation is also broken:
Data.DB.TField.AsString
Representa el valor del campo como una cadena (Delphi) o un AnsiString (C++).
Esto no representa un string
en Delphi, sino una AnsiString
! El hecho de que la propiedad use un tipo simple string=UnicodeString
es perfectamente engañoso.
Desde el punto de vista de la base de datos, depende del controlador de base de datos manejar Unicode o trabajar con un juego de caracteres específico. Pero en el punto de vista de VCL, en Delphi 2009+ solo debe conocer el tipo de string
y tener la seguridad de que al usar AsString: String
estará listo para Unicode.
+1 Dado que este comportamiento es en mi humilde opinión una implementación incorrecta de VCL. En mi humilde opinión es una denominación errónea, * incompatible con el resto, la VCL/RTL * y una fuente de mucha confusión/malentendido. Tu pregunta tiene un sentido perfecto. –