Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con Unicode (creo...) (https://www.clubdelphi.com/foros/showthread.php?t=30455)

vhr 06-04-2006 17:39:22

Problemas con Unicode (creo...)
 
Hola disculpen la molestia, el duda q no puedo resolver, es respecto a unicode, (creo) por distintas razones yo quiero trabajar una cadena de caracteres q me viene de un ClientDataSet gracias a la propiedad XMLData, en dicho ClientDataset, existe un campo blob (donde se guarda una imagen jpg), como comente requiero lastimosamente tratar a esa cadena como si fuera un WideSting comun, (no puedo usar XMLDocument ni nada por el estilo), el problema es que con algunas imágenes (que deben meter algun carácter raro en la cadena del xml) las funciones posex o length no funcionan, o dan resultados inadecuados, por ejemplo en un widestring q tiene una longitud de 5426, el length de dicha variable me da “0”, el posex trabaja y encuentra subcadenas dentro de la cadena principal pero hasta una determinada posición, luego de ella no encuentra mas nada, es como si la cadena se truncara, pero sin embargo puedo hacer a := b[5400] donde b es el widestring, sin ningun problema, no es para nada difícil reprogramar la funcion posex para que tome como parámetro un widestring en lugar de un string, pero con length…. Se me queman los papeles, y la verdad es que tengo incontables lineas de codigo donde uso esa funcion (length) y me duele pensar en q todo eso no pude andar


La modificacion burda de posex es la siguiente

Código Delphi [-]
function Wd_PosEx(const SubStr, S: Widestring; Offset: Cardinal = 1): Integer;
Código Delphi [-]
var
  I,X: Integer;
  Len, LenSubStr: Integer;
begin
  if Offset = 1 then
    Result := Pos(SubStr, S)
  else
  begin
    I := Offset;
    LenSubStr := Length(SubStr);
    Len := Length(S) - LenSubStr + 1;
    while I <= Len do try
      if S[i] = SubStr[1] then begin
        X := 1;
        while (X < LenSubStr) and (S[I + X] = SubStr[X + 1]) do Inc(X);
        if (X = LenSubStr) then begin
          Result := I;
          exit;
        end;
      end;
      Inc(I);
    except
      Result := 0;
    end;
  end;
end;
 
Si bien es realmente simple la verdad no pude probarla pues al no tener resuelto el length... jjejejejeje espero q esto funcione.
 
PD trabajo con delphi 7


La franja horaria es GMT +2. Ahora son las 15:19:33.

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