Tiburon – Unicode e RawByteString

 

A grande novidade para o Delphi 2009 e C++ Builder 2009 é o suporte completo ao Unicode, e isto todo mundo sabe, toda a VCL e RTL foram revisadas, a estrutura de String foi modificada, novos tipos foram criados, novas classes para auxiliar a programação internacionalizada foram adicionadas a RTL e VCL, mas uma que merece atenção neste momento é a RawByteString.

RawByteString tem como principal propósito ser utilizada como parâmetros para métodos que precisam preservar o StringCodePage. Sem RawByteString, seria necessário criar overloads dos métodos para todas os tipos de AnsiString.

Na prática RawByteString desativa a conversão implicita entre os tipos de String, mantendo a StringCodePage da String passada. O StringCodePage de RawByteString é declarado como 65535, mas é apenas para informar ao compilador que se trata de um tipo que não deverá sofrer conversão implicita. Então o StringCodePage de um RawByteString só tem sentido em tempo de execução, que armazenará o StringCodePage da String que está sendo utilizada. E se nenhuma String estiver sendo armazenada no momento o StringCodePage retornado sempre será o “Default Code Page”, que é o definido na configuração do Windows, dependendo da localização.

procedure TFormUnicode.ShowCodePage(const S: RawByteString);
begin
  MessageDlg(IntToStr(StringCodePage(S)),mtInformation, [mbOK], 0);
end;

procedure TFormUnicode.ButtonCodePageClick(Sender: TObject);
var
  A: AnsiString;
  F: UTF8String;
  S: String;
begin
  A:= 'Tiburón';
  F:= 'Tiburón';
  S:= 'Tiburón';
  ShowCodePage(A);
  ShowCodePage(F);
  ShowCodePage(S);

  MessageDlg(
    Format('AnsiString: %d', [StringCodePage(A)]) + #13#10 +
    Format('UTF8String: %d', [StringCodePage(F)]) + #13#10 +
    Format('String: %d', [StringCodePage(S)]),
    mtInformation, [mbOK], 0
  );
end;

Tiburon - RawByteString

No Exemplo acima, sem RawByteString, seriam necessários 3 métodos ShowCodePage, para cada tipo de String, o interessante que o Code Page mostrado para o tipo String, pelo ShowCodePage é 0 (Zero) e no Format é 1200, como você pode ver na imagem.

Nos links a seguir há uma série de artigos interessantes mostrando muitos detalhes interessantes do suporte a Unicode, e Jan Goyvaerts publicou ótimos artigos sobre RawByteString.

Referências

 
 
 

0 Comments

 

You can be the first one to leave a comment.

 

Leave a Comment

 




XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>