entendo, porém aqui funcionou.
Este link que vc me mandou é de 2007. Naquela época não existiam os delphis mais novos com modificações de Strings.
[]s
dá uma olhada neste post, transcrevi aqui deste link (https://pt.stackoverflow.com/questions/51308/diferença-entre-ansistring-widestring-unicodestring-shortstring-e-string-e-com)
AnsiString: string composta por caracteres ASCII. Cada Char possui exatamente 1 bytes. Um ponteiro para uma AnsiString (^AnsiString) equivale a char* em C;
WideString: existe apenas por compatibilidade com o Windows. Cada Char possui 2 bytes, e deve ser utilizada em funções da Win32 com parâmetros LPWSTR, realizando um cast para PWChar;
UnicodeString: string unicode. Por padrão UTF-16 (ou pelo menos era quando pesquisei pela última vez), mas pode assumir outras codificações, como UTF-8.
ShortString: equivale a string antiga do Pascal, com sua limitação de de 255 caracteres.
String: nas versões mais novas do Delphi (2007 em diante), equivale a UnicodeString. Antigamente equivalia a AnsiString.
Tanto AnsiString quanto UnicodeString são mais do que um simples array of Char, sendo que elas possuem informações de página de código e tamanho. Porém, para facilitar o cast destes tipos para PChar e suas variações, estas informações ficam nos endereços anteriores ao retornado pelo operador @.
Conversão
A conversão entre elas é feita automaticamente. Único cuidado que deve ser tomado, é que dados podem ser perdidos durante a conversão devido ao tipo não suportar alguma característica da string de origem.
Por exemplo, converter UnicodeString para AnsiString, pode haver perda devido aos caracteres Unicode poderem ocupar mais que 1 byte.
Conversão de AnsiString (ou UnicodeString) para ShortString, haverá perda de dados se a string de origem for maior que 255 (Length(origem) > 255).