![]() |
ANSI-String nach Unicode wandeln
Hallo ich habe einen ANSIString, der Unicode enthält und den ich in einen UnicodeString wandeln möchte (Delphi 2009). Wie mache ich das? Das Beispiel soll "Hallo" anzeigen, zeigt aber nichts da, wie man im Debugger sehen kann in AString noch immer eine #0 am Anfang steht (Stringende)
Delphi-Quellcode:
var
AANSIString: AnsiString; AString: string; begin AANSIString := #0'H'#0'a'#0'l'#0'l'#0'o'; AString := AANSIString; ShowMessage(AString); |
Re: ANSI-String nach Unicode wandeln
Und wer macht sowas in einen AnsiString?
Da wirst du jetzt mit Harten Casts arbeiten müssen bzw. Speicher-Copierroutinen Inhalt deines AnsiStrings -> Speicheradresse von Unicodstring der zuvor mit SetLength auf passende größe gebraucht wurde. |
Re: ANSI-String nach Unicode wandeln
Ab D2009 hast du es eigentlich sehr einfach. Beispiel:
Delphi-Quellcode:
In deinem Falle, müsstest du nur dafür sorgen, dass du die #0 vorher aus dem AnsiString entfernst.
var
A: AnsiString; U: String; begin A := 'Hallo'; // compiler Magic :) U := A; ShowMessage(U); end; |
Re: ANSI-String nach Unicode wandeln
Zitat:
Delphi-Quellcode:
Das ändern auch nichts am Ergebnis.
AString := String(AANSIString);
Wäre es einfacher wenn man statt des AnsiStrings einen RawByteString hätte? Wie könnte man den in Unicode wandeln? Das Grundproblem ist folgendes: Ich habe eine ANSI-Datei die zeileweise eingelesen wird. In einer Zeile kann an einer beliebigen Stelle ein Unicode-String anfangen (bis zum Zeilenende). Das ist durch $FE$FF markiert. Daher dachte ich, dass es am einfachsten ist, diesen Teil einfach per Copy aus dem Ansi-String zu kopieren und in einen Unicode string zu wandel. Mit den ANSI-Inhalten davor werden noch ein paar Prüfungen angestellt, ob man den Unicodestring überhaupt braucht oder nicht. |
Re: ANSI-String nach Unicode wandeln
Zitat:
|
Re: ANSI-String nach Unicode wandeln
Probiers mal so:
Delphi-Quellcode:
var
A: AnsiString; U: String; I: Integer; begin A := #0'H'#0'a'#0'l'#0'l'#0'o'; SetLength(U, Length(A) div 2); for I := 1 to Length(A) do begin if (A[I] <> #0) then U[I div 2] := Char(A[I]); end; ShowMessage(U); end; |
Re: ANSI-String nach Unicode wandeln
Zitat:
Zitat:
Lese die Datei mit TFileStream ein und wandle dann die eingelesenen Datenblöcke passend nach ANSI oder Unicodestring. |
Re: ANSI-String nach Unicode wandeln
Zitat:
|
Re: ANSI-String nach Unicode wandeln
Zitat:
|
Re: ANSI-String nach Unicode wandeln
wie? selber kopieren ... fertiges gibt es hierfür nicht
Move / MoveMemory |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz