Para recibir y mostrar correctamente texto codificado en UTF-8 en Delphi (especialmente versiones como Delphi 7 que no tienen soporte nativo de UTF-8 en los AnsiString), necesitas realizar algunas conversiones manuales o usar componentes que manejen UTF-8 adecuadamente.
✅ Delphi moderno (Delphi XE en adelante)
Si estás usando una versión moderna de Delphi (Delphi XE+), puedes trabajar directamente con UTF8String y UnicodeString, ya que la clase String es UnicodeString por defecto.
Código Delphi
[-]
uses
System.SysUtils;
var
utf8Texto: UTF8String;
textoFinal: string;
begin
utf8Texto := '{"mensaje":"¡Bienvenido a México!"}';
textoFinal := UTF8ToString(utf8Texto); ShowMessage(textoFinal);
end;
🧵 Delphi 7 o versiones antiguas (AnsiString por defecto)
Delphi 7 no trabaja de forma nativa con UTF-8, pero puedes usar una función como esta para convertir una cadena en UTF-8 a WideString o string legible:
✅ Opción 1: Usar UTF8Decode (de SysUtils)
Código Delphi
[-]
uses
SysUtils;
var
utf8Cadena: string;
textoDecodificado: string;
begin
utf8Cadena := '{"mensaje":"¡Bienvenido a M\u00e9xico!"}';
textoDecodificado := UTF8Decode(utf8Cadena); ShowMessage(textoDecodificado);
end;
🔴 Nota importante: UTF8Decode solo convierte UTF-8 en bytes, no convierte automáticamente los \uXXXX (Unicode escapes como \u00e9), esos debes convertirlos manualmente si vienen así (como en JSON).
✅ Para reemplazar \uXXXX por caracteres reales (por ejemplo, en respuestas JSON)
Puedes usar una función como esta para convertir los \uXXXX en caracteres legibles:
Código Delphi
[-]
function UnicodeDecode(const S: string): string;
var
I: Integer;
Code: Integer;
HexStr: string;
begin
Result := '';
I := 1;
while I <= Length(S) do
begin
if (S[i] = '\') and (I + 5 <= Length(S)) and (S[I+1] = 'u') then
begin
HexStr := Copy(S, I + 2, 4);
if TryStrToInt('$' + HexStr, Code) then
begin
Result := Result + WideChar(Code);
Inc(I, 6);
Continue;
end;
end;
Result := Result + S[i];
Inc(I);
end;
end;
EJEMPLO DE USO:
Código Delphi
[-]
var
respuesta: string;
begin
respuesta := '{"mensaje":"Bienvenido a M\u00e9xico"}';
respuesta := UnicodeDecode(respuesta); ShowMessage(respuesta);
end;
🔧 Si estás trabajando con HTTP (como REST/JSON):
Asegúrate de que el componente (como IdHTTP, Synapse, HttpClient) esté configurado para recibir texto como UTF-8:
Código Delphi
[-]
IdHTTP1.Request.ContentType := 'application/json; charset=utf-8';
IdHTTP1.Request.AcceptCharSet := 'utf-8';
Luego haz la conversión adecuada al recibir la respuesta.