Ver Mensaje Individual
  #1  
Antiguo 06-04-2006
vhr vhr is offline
Miembro
 
Registrado: feb 2005
Ubicación: Argentina- Buenos Aires- Quilmes
Posts: 28
Reputación: 0
vhr Va por buen camino
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

Última edición por marcoszorrilla fecha: 06-04-2006 a las 19:55:41.
Responder Con Cita