11. august 2004 - 14:03
Der er
4 kommentarer og
1 løsning
TADOQuery og unicode
Jeg forsøger i øjeblikket at hente data ud af en oracle database som kører unicode. Jeg benytter følgene kode til at hente en tekst ud:
...
ADOQuery1.FieldByName('name').AsString;
...
Problem:
Specielle tegn bliver ikke konverteret korrekt, således at f.eks nogle norske navne ikke vises korrekt i applikationen.
Hvordan kan man sikre sig at tekstene bliver konverteret korrekt? Jeg har forsøgt at benytte "asVariant", men uden held.
11. august 2004 - 15:26
#2
Undskyld - det var min egen rutine. Her kommer koden:
procedure TStandat.ConvertToAnsi(aCodepage : string; aStrings: TStrings);
var
p, lgd : integer;
p_in : pAnsiChar;
p_out : pWideChar;
st_out : WideString;
begin
p := pos(CodePagePrefix,aCodepage);
if p > 0 then
System.Delete(aCodepage,1,length(CodePagePrefix)+1);
p_in := pAnsiChar(aStrings.Text);
Lgd := MultiByteToWideChar(StrToInt(aCodePage),MB_PRECOMPOSED,p_in,-1,nil,0);
SetLength(st_out,lgd - 1);
p_out := pWideChar(st_out);
MultiByteToWideChar(StrToInt(aCodePage),MB_PRECOMPOSED,p_in,-1,p_out,lgd - 1);
aStrings.Text := string(p_out);
end;
Det var MultiByteToWideChar der måske havde interesse.
11. august 2004 - 21:45
#4
I aCodepage skrives 850, 865 eller lignende. Bemærk detaljen med at kalde funktionen med en output-størrelse på nil returnerer længden på det der skal allokeres bagefter.
Der er en lang og interessant (!) beskrivelse på MSDN.
Efter lidt graven i VCL'et ser det ikke ud til at der foretages nogen konvertering der. Data kopieres råt og ukonverteret.