Thema: Delphi Unicode-Umwandlung

Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#13

Re: Unicode-Umwandlung

  Alt 11. Aug 2007, 22:11
Zitat von Ydobon:
Ich blick hier anscheinend nicht ganz durch, warum UTF-16 nach UTF-16 wandeln? Wenn ich
Delphi-Quellcode:
var s: String;
    ws: PWideChar;
   l: Integer;
begin
  s := #$53#$30#$8C#$30#$6F#$30#$5E#$97#$38#$5E#$6B#$30#$ED#$77#$44#$30#$C6#$30#$AD+
       #$30#$B9#$30#$C8#$30#$67#$30#$42#$30#$8B#$30#$02#$30#$2E#$00#$69#$00#$64#$00#$78#$00;
  ws:=PWChar(@s[1]);
  TntEdit1.Text:=ws;
bekomm ich (ohne führendes Nullbyte) これは非常に短いテキストである。.idx bzw. mit s := #$53#$30#$8C#$30#$6F#$30#$5E#$97#$38; ergibt sich (+#$00) これは非8. Soll das in etwas herauskommen? Wenn du bereits Unicode hast, dann gibt es da doch nichts mehr umzuwandeln. Wie liest du die Info2 denn aus?
Hallo. In meinem Beispiel soll es wirklich これは非常に短いテキストである (Babelfish: This is a very short text) heißen. Noch habe die die Routine für die Auslesung aus der INFO2 noch nicht geschrieben. Mein Beispielnamen habe ich durch den Hexeditor aus der INFO2 manuell ausgelesen.

Zitat von marabu:
Hallo Robert,

Zitat von blackdrake:
... Als erstes brauche ich eine Funktion, die ANSI in Unicode umwandelt. ...
wenn Daniel die Funktion StringToWideString() so verwendet, wie er es zeigt - d.h. mit CP_ACP = 0 - dann kann er auch gleich mit einer Zuweisung arbeiten - Delphi macht dann genau das gleiche. Mich macht aber seine Erwähnung von japanischen Zeichen im Kommentar stutzig. Wenn wirklich ein SJIS-Dateiname vorliegt, dann sind die beiden Funktionen hilfreich, da die CodePage unabhängig von der aktuellen frei gewählt werden kann.

Freundliche Grüße
Ich verstehe das ganze nicht so richtig... ich muss doch erstmal Unicode -> WideChar/WideString (?) umwandeln, damit die Datei korrekt umbenannt wird...

Zitat von marabu:
Hallo,

die Zeichenfolge #$53#$30#$8C#$30#$6F#$30#$5E#$97#$38#$00 ist in Delphi immer ein AnsiString und könnte tatsächlich UTF-16 Hiragana sein. Ich hatte mir den String nicht genau angesehen, weil Windows in Japan mit CP 932 (Shift-JIS) arbeiten soll.

Das Arbeiten mit dem Literal ist ja wohl nur ein Test, da ja der eigentliche Dateiname über eine Funktion ermittelt wird. Die Interpretation als WideString ist so möglich:

Delphi-Quellcode:
var
  s: string;
  ws: WideString absolute s;
begin
  s := #$53#$30#$8C#$30#$6F#$30#$5E#$97#$38#$00;
  ShowMessage(ws);
end;
Freundliche Grüße
Folgender Code:

Delphi-Quellcode:
begin
  MoveFileW('testa', #$53#$30#$8C#$30#$6F#$30#$5E#$97#$38#$00);
end;
benennt meine Datei testa in S0Œ0o0^—8 um...

Und folgender Code:

Delphi-Quellcode:
begin
  MoveFileW('testa', #$53#$30#$8C#$30#$6F#$30#$5E#$97#$38#$5E#$6B#$30#$ED#$77#$44#$30#$C6#$30#$AD#$30#$B9#$30#$C8#$30#$67#$30 +
             #$42#$30#$8B#$30#$02#$30#$2E#$00#$69#$00#$64#$00#$78#$00#$00);
end;
macht gar nichts. Ich habe am Ende noch eine Nullterminierung (bei Unicode $00 $00) hinzugefügt. Aber irgendwie funktioniert das nicht. Die Datei sollte sich in これは非常に短いテキストである.idx umbennen.

Weiß irgendwer Rat? Ich bin im Moment total verwirrt mit Unicode und WideChar, WideString und Pointern usw... Ist eine Grauzone in meinem Gebiet.

Gruß
blackdrake

[edit=mkinzler]Umbruch in Code eingefügt Mfg, mkinzler[/edit]
Daniel Marschall
  Mit Zitat antworten Zitat