Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 2 Semanas
Nano Ramírez Nano Ramírez is offline
Registrado
 
Registrado: mar 2025
Posts: 9
Poder: 0
Nano Ramírez Va por buen camino
Uft-8 en TStringStream

Buen día. Tengo el siguiente código en donde recibo los datos pero no los recibo en UTF-8 como le indico, sino en Unicode. Cómo puedo hacer para recibir la codificación correcta?

Código Delphi [-]
try
    response:=TStringStream.Create('',TEncoding.UTF8);
    IdHTTP:=TIdHTTP.Create(nil);
    SSLHandler:=TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);


    SSLHandler.SSLOptions.Method:=sslvSSLv23;
    SSLHandler.SSLOptions.Mode:=sslmBoth;
    IdHTTP.IOHandler:=SSLHandler;
    IdHTTP.Request.CustomHeaders.Values['Authorization']:='Bearer '+token;
    IdHttp.Request.ContentEncoding:='UTF-8';
    IdHTTP.Request.ContentType:='application/json';
    IdHTTP.Get(url,response);

    //Configurar el response
    if IdHTTP.ResponseCode=200 then begin
      res:=response.DataString;
Responder Con Cita
  #2  
Antiguo Hace 2 Semanas
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Unicode, simplificando, es la lista de caracteres.
Utf8 es una de las formas de representarlos.
Tu código funcionará bien, los caracteres utf8 pertenecen al grupo de caracteres unicode.
Al igual que los utf16, utf32, etc. todos muestran/representan los caracteres unicode.
Responder Con Cita
  #3  
Antiguo Hace 2 Semanas
Nano Ramírez Nano Ramírez is offline
Registrado
 
Registrado: mar 2025
Posts: 9
Poder: 0
Nano Ramírez Va por buen camino
Gracias por responder, pero creo que mi pregunta no fue clara. Me refiero a cómo puedo recibir la respuesta codificada en utf8 y evitar que me aparezcan los códigos unicode por ejemplo en los acentos?
Responder Con Cita
  #4  
Antiguo Hace 2 Semanas
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
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); // Convierte de UTF-8 a Unicode (string)
  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); // Solo si la cadena está en UTF-8 puro
  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); // Convierte los \u00e9 en é
  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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Vaciar el contenido de un TStringStream adebonis Varios 5 04-02-2019 17:26:55
TRichEdit, TStringStream y cierto error que no logro "cachar"... TiammatMX OOP 2 12-05-2012 00:36:18


La franja horaria es GMT +2. Ahora son las 13:55:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi