AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Ansi/Unicode-Char-Index umrechnen
Thema durchsuchen
Ansicht
Themen-Optionen

Ansi/Unicode-Char-Index umrechnen

Ein Thema von himitsu · begonnen am 22. Sep 2010 · letzter Beitrag vom 3. Nov 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

Ansi/Unicode-Char-Index umrechnen

  Alt 22. Sep 2010, 09:31
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.

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.
$2B or not $2B

Geändert von himitsu (22. Sep 2010 um 09:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: Ansi/Unicode-Char-Index umrechnen

  Alt 3. Nov 2010, 22:00
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:

Ursache sind vorallem die "bösen" Composite-Characters.

Wenn du also keine Bibliothek benutzt, ist die von dir vorgeschlagene eine einfache und gangbare Methode.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 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