Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ansi/Unicode-Char-Index umrechnen (https://www.delphipraxis.net/154711-ansi-unicode-char-index-umrechnen.html)

himitsu 22. Sep 2010 08:31

Ansi/Unicode-Char-Index umrechnen
 
Moin,

mal angenommen ich haben einen AnsiString mit irgendeiner CodePage, welcher nach Unicode umgewandelt wurde (MultiByteToWideChar).
In dem Unicode-String haben ich eine bestimmte Stelle gefunden und möchte/muß nun aber wissen welche Stelle dieses im AnsiString ist/war.

Wie könnte man nun also möglichst optimal/einfach diesen Index umrechnen?

Aktuell werde ich mir wohl gleich eine Funktion schreiben, welche per CharNextExA im AnsiString, via PAnsiChar, x Zeichen (dem Unicode-Index entsprechend) abzählt und dann den Index ausrechnet (String-Start - aktuelle Position).
Nur hab ich jetzt schon die Befürchtung, daß es nicht so richtig funktionieren wird. :cry:

Aber geht das noch einfacher?

Das Problem ist, daß zwar (meistens) jedes Ansi/Multibyte-Zeichen ein bestimmtes Unicodezeichen representiert, aber nicht jedes Unicodezeichen durch nur ein Ansi/Multibyte-Zeichen representiert werden kann.
Also kann ich doch nicht einfach WideCharToMultiByte verwenden und mir einen Wert liefern lassen, da die Rückrechnung nicht unbedingt den selben String ergeben muß, wie der Ausgangs-AnsiString?
Ursache sind vorallem die "bösen" Composite-Characters.

Assarbad 3. Nov 2010 21:00

AW: Ansi/Unicode-Char-Index umrechnen
 
Zitat:

Zitat von himitsu (Beitrag 1051159)
Also kann ich doch nicht einfach WideCharToMultiByte verwenden und mir einen Wert liefern lassen, da die Rückrechnung nicht unbedingt den selben String ergeben muß, wie der Ausgangs-AnsiString?

Korrekt. Wie du auch schon selber bemerktest:

Zitat:

Zitat von himitsu (Beitrag 1051159)
Ursache sind vorallem die "bösen" Composite-Characters.


Wenn du also keine Bibliothek benutzt, ist die von dir vorgeschlagene eine einfache und gangbare Methode.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz