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]