Ver Mensaje Individual
  #10  
Antiguo 24-09-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
cesarsoftware,

Cita:
Empezado por cesarsoftware
...creo un servidor TCP y a mi aplicación se le hacen consultas...

...vete tu a saber que SO lleva...puede ser cualquiera, incluso linux...sino es un SO propietario...el cliente remoto es eso, un cliente remoto...lo que si se es que lo normal es que esperen caracteres ASCII...

...si la cadena ya se ha generado en UTF8 no voy a poder convertirla nunca...
Te comento:

1- Sería conveniente saber cuales son las características del cliente remoto que presenta el problema mencionado en el Msg #1, quizás con mayor información podamos acotar el problema de forma más precisa.

2- ¿Has probado el tipo de dato UTF8String y la función de conversión Utf8ToAnsi?, la idea es manejar los datos a enviar en el Servidor como UTF8String y convertirlos a ASCII por medio de Utf8ToAnsi al momento del envío.

Revisa esta información:
Cita:
Empezado por Delphi Object and Component Reference
UTF8String represents a string in the UTF-8 character set, UTF8String is the type for strings encoded using UTF-8. UTF-8 is an efficient encoding of Unicode character-strings that recognizes the fact that the majority of text-based communications are in ASCII, and optimizes the encoding of these characters.
3- Quizás el problema esta relacionado al CodePage del Sistema Receptor, la tabla ASCII varía según el mismo, por ejemplo el CodePage 437 se corresponde con la siguiente tabla: El codigo ASCII, la cual se adapta a lo esperado por el Servidor según lo comentado en el Msg #1, pregunto: ¿Y si el CodePage fuera otro cualquiera?, revisa este link : Code Page Identifiers

4- Revisa este código:
Código Delphi [-]
function ChangeCodePage(const InputStr: AnsiString; CodePage : Integer): AnsiString;
var
   AuxStr: WideString;

begin

   AuxStr := WideString(InputStr);

   SetLength(Result, WideCharToMultiByte(CodePage, 0, PWideChar(InputStr),
            Length(InputStr), nil, 0, nil, nil));

   WideCharToMultiByte(CodePage, 0, PWideChar(AuxStr), Length(AuxStr),
                       PAnsiChar(Result), Length(Result), nil, nil);

end;
El código anterior convierte un String a un AnsiString con un CodePage específico, quizás puedas probar enviando los datos como CodePage 437.

Revisa este link:
Cita:
WideCharToMultiByte function : http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Pregunto:

1- ¿El problema se presenta con más de un cliente remoto?.

2- ¿Hay clientes remotos con los que funciona bien la transferencia?.

3- ¿Has considerado normalizar todos los datos eliminado los caracteres acentuados por sus correspondientes sin acento?.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 24-09-2013 a las 15:46:10.
Responder Con Cita