Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Letras chinas en delphi 2010 (https://www.clubdelphi.com/foros/showthread.php?t=87439)

YosvanyRL 06-01-2015 20:12:41

Letras chinas en delphi 2010
 
Primero que todo mis saludos a todos los del club de delphi y disculpen mi larga ausencia. Estube terminando la escuela de enfermeriay no tenia tiempo ni de habrir la computadora. Tengo un gran problema que acabo de ver en cuanto abro mi pc por primera vez despues de tanto, para hacer algo de codigo. El problema es el siguiente, lo mas raro del mundo, al menos para mi, nunca visto. Bueno Tampoco soy un programadorsaso pero ya hago alguito
Cuando cifro un texto con una funcion para encriptar texto, porque tambien me lo hace con ASE 256, me salen letras chinas o algo asi que no me las guarda como texto en un archivo de texto. Pues cuando lo cargo para desencriptarlo no me lo reconose es algo como esto

䜹ƽȤ﻾ҍ⣉՞⮛ԿȚ֫냋ࠐ᎚ࢪ伇ळ姿୕ꅵல

sin embargo lo hago con la misma funcion en delphi 2006 el que tenia anterior y me sale como debiera ser, o algo parecido a lo que deberia ser, pienso yo y es esto:

ªH¥ðí9í GsíØL¼e%ÈŸÍ&ñÖÉ

quisiera seguir trabajando con delphi 2010 pero con estos truenos...

No se si tiene que ver con el sTEdit del AlphaControl skin component que estoy usando o es un fastasma chino, pero me tiene loco quisiera saber si eso tiene solucion sino para seguir usando el 2006

Las funciones que use son
Código Delphi [-]
function descifrar(cadena: String; Key: Integer): String;
var
i:integer;
begin
   Result:='';
   for i:=1 to Length(cadena) do
   begin
    RandSeed:= key*i+length(cadena);
    if i mod 2= 0 then
       Result:=Result+Chr((ord(cadena[i])-i) xor (KEY*i+random(512)+length(cadena)))
    else
       Result:=Result+Chr((ord(cadena[i])+randseed) xor (KEY*i*random(1024)-length(cadena)))  ;
    end;
end;
Código Delphi [-]
function cifrar(cadena: String; Key: Integer): String;
var
i:integer;
begin
   Result:='';
   for i:=1 to Length(cadena) do
   begin
    RandSeed:= key*i+length(cadena);
    if i mod 2=0 then
       Result:=Result+Chr(ord(cadena[i]) xor (key*i+random(512)+length(cadena))+i)
    else
       Result:=Result+Chr(ord(cadena[i]) xor (key*i*random(1024)-length(cadena))-randseed)  ;
    end;
end;
Por favor si alguien conose al respecto seria de mucha ayuda
Gracias y saludos a todos los que participan en esta magnifica pagina web

Casimiro Notevi 06-01-2015 20:19:21

Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

Casimiro Notevi 06-01-2015 20:21:30

Seguramente tendrás que cambair "string" por "ansistring".
Es debido a que a partir de delphi 2010 (creo recordar) se usa unicode utf-8 en lugar de string "normal"

YosvanyRL 07-01-2015 02:39:04

Aun las letras chinas...
 
Gracias por responder tan rapido porque realmente lo necesito. Con relacion a las letras chinas que me salen. He cambiado la funcion para cifrar texto por la siguiente que es el Advanced Encryption Standar
Código Delphi [-]
function cifrarTexto (Str, Clave : String) : String;
var
  Src: TStringStream;
  Dst: TMemoryStream;
  Size: Integer;
  Key: TAESKey;
  ExpandedKey: TAESExpandedKey;
begin
  Result:= EmptyStr;
  Src:= TStringStream.Create(Str);
  try
    Dst:= TMemoryStream.Create;
    try
      // Preparamos la clave, lo ideal es que tenga 32 caracteres
      FillChar(Key,Sizeof(Key),#0);
      if Length(Clave) > Sizeof(Key) then
        move(PChar(Clave)^,Key,Sizeof(key))
      else
        move(PChar(Clave)^,Key,Length(Clave));
      EsExpandKey(ExpandedKey,Key);
      // Guardamos el tamaño del texto original
      Size:= Src.Size;
      Dst.WriteBuffer(Size,Sizeof(Size));
      // Ciframos el texto
      AESEncryptStreamECB(Src,Dst,ExpandedKey);
      // Lo codificamos a base64
      Result:= BinToStr(Dst.Memory,Dst.Size);
    finally
      Dst.Free;
    end;
  finally
    Src.Free;
  end;
end;
Y me siguen saliendo las letras chinas.

Cambie el siguiente codigo de la funcion
Código Delphi [-]
function cifrarTexto (Str, Clave : String) : String;
por
Código Delphi [-]
function cifrarTexto (Str, Clave : AnsiString) : AnsiString;

y ahora me sale ??????????????????????????? en vez de las letras chinas

Please, que es ese fantasma chino que me atormenta?

nlsgarcia 07-01-2015 05:30:35

YosvanyRL,

Te sugiero revisar el Punto #9 de la Guía de estilo de los foros, los Mensajes #1 y #4 fueron corregidos por Identación y Sintaxis Delphi.

¡Gracias por tu cooperación! :) ^\||/

Saludos,

Nelson.

ElKurgan 07-01-2015 07:51:47

Cita:

Empezado por YosvanyRL (Mensaje 487359)
Cambie el siguiente codigo de la funcion
Código Delphi [-]
function cifrarTexto (Str, Clave : String) : String;
por
Código Delphi [-]
function cifrarTexto (Str, Clave : AnsiString) : AnsiString;

y ahora me sale ??????????????????????????? en vez de las letras chinas

Please, que es ese fantasma chino que me atormenta?

Es que no vale con cambiar el tipo de los parámetros de la función. Por dentro está utilizando unos objetos (que en principio no sé cuales son) que estarán esperando el tipo en el que se programaron originalmente. Me explico, ahora la función "Length" devuelve valores distintos si se trata de un string o de un ansistring, ya que los string hasta Delphi 2009 eran los de siempre, mientras que ahora el tipo string equivale al antiguo "WideString". A lo mejor tienes que hacer un "cast" en alguna otra llamada dentro de la función, según lo vayas necesitando.

Cuando tenga un momento le echo un vistazo.

otra opción es que busques los componentes actualizados a la versión que estés utilizando en este momento, que seguro que tienen corregidas estas diferencias

Nota: Casimiro, el Unicode se añadió a Delphi 2009, que fue el gran cambio de dicha versión.

Un saludo

Casimiro Notevi 07-01-2015 09:54:59

Cita:

Empezado por ElKurgan (Mensaje 487364)
el Unicode se añadió a Delphi 2009, que fue el gran cambio de dicha versión.

Gracias por la info, yo me quedé en el 2007 :)

YosvanyRL 07-01-2015 15:49:39

Aun las letras chinas...
 
Gracias por la informacion. Y cuando le heches un ojito al codigo por favor hasme saber porque me gusta el delphi 2010 mas que el 2006. Me da la opcion e buscar en los componentes el componente que quiero mientras tecleeo su nombre y me ahorra tiempo. Pero si ustedes me recomiendan algo pues con gusto lo acepto. Ahhhhhh disculpen por los errores. Ya lei la guia de estilo .
Gracias por todo y no olvides hecharle un ojito al codigo...
Muchas gracias y un feliz 2015 para todos.


La franja horaria es GMT +2. Ahora son las 08:00:09.

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