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;
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
- I Like My Bytes Raw – Jan Goyvaerts
- Using RawByteString Effectively – Jan Goyvaerts
- What is Unicode, Why do you need it, and How do you work with it in Delphi? – Nick Hodges
- New RTL Features and Classes to Support Unicode – Nick Hodges

Leave a Reply