AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unicode erkennen

Ein Thema von Zacherl · begonnen am 1. Aug 2008 · letzter Beitrag vom 2. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Unicode erkennen

  Alt 1. Aug 2008, 18:46
Hey,

ich brauche eine Funktion, mit der ich erkennen kann, ob in einem String Unicode Zeichen vorhanden sind. Ich stelle in einer Komponente folgende Procedure bereit::

procedure DoSomething(Text: String) Nun kann der Funktion sowohl ein "normaler" ASCII String übergeben werden, oder aber ein nach String getypecasteter Unicode String der Form:

String(MyWideString) Jetzt muss ich allerdings innerhalb der Funktion wissen, ob es sich um Unicode handelt oder nicht. Überladen der Funktion bzw Hinzufügen eines weiteren Parameters scheidet aus bestimmten Gründen aus.

Hoffe da kann mir jemand helfen.

Gruß Zacherl
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Unicode erkennen

  Alt 1. Aug 2008, 18:53
Dürfte egal sein, da der Inhalt des Parameters kein Unicode mehr enthält.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Unicode erkennen

  Alt 1. Aug 2008, 18:56
Natürlich. Ein Unicode Zeichen besteht aus 2 Bytes. Ein ASCII Zeichen nur aus Einem. Innerhalb der Funktion sieht es dann so aus:

Delphi-Quellcode:
{ ASCII }
  Text = (#13)

{ UNICODE }
  Text = (#00 #13)
Bei der ersten Variante wurde VK_RETURN in einem String übergeben und bei der zweiten Variante in einem WideString. Unicode Zeichen benutzen halt zusätzlich noch das erste Byte. Bei normalen ASCII Zeichen wird das erste Byte einfach nicht verwendet.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Unicode erkennen

  Alt 1. Aug 2008, 18:58
Aber durch den Typcast geht genau das verloren.
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#5

Re: Unicode erkennen

  Alt 1. Aug 2008, 19:02
Wenn fast jedes 2te (Little-Endian) Byte eine Null ist oder oder eine Surrogate-Bitfolge (siehe UTF-16) enthält, ist es mit großer Wahrscheinlichkeit, ein WideString ist, vorausgesetzt du verwendest lateinisch Buchstaben.

//Edit1: (= praktischer Vorschlag)

Du nimmst erstmal den AnsiString an und wenn zu viele ungültige/unübliche Zeichen enthalten sind, probierst du es eben mit als Widestring.

//Edit2:

Wenn mkinzler recht hat (und das ist bei Delphi wahrscheinlich), geht das von mir natürlich vorgeschlagene nicht.

MfG,
Bug
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Unicode erkennen

  Alt 1. Aug 2008, 20:07
String(MyWideString) macht keinen schnöden TypeCast ... es lebe die Compilermagic

der WideString wird in einen (Ansi)String umgewandelt ... ergo, es gibt keine Unicodeinformationen mehr.


Lösung: versuch's mal mit PChar/PAnsiChar und PWideChar

oder wie wär's mit UTF8?
Delphi-Quellcode:
DoSomething(MyAnsiString);
DoSomething(UTF8Encode(MyWideString));

procedure DoSomething(Text: String);
var S: WideString;
begin
  S := UTF8Decode(Text);
  if (Text <> '') and (S <> '') then begin
    // WideString in S
  end else begin
    // AnsiString in Text
  end;
end;
[edit] falschen Dateiangang ersetzt
Miniaturansicht angehängter Grafiken
unbenannt_563.jpg  
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

Re: Unicode erkennen

  Alt 1. Aug 2008, 20:22
OffTopic@himitsu Wieso hast du einen "Handygutschein" angehangen? Und dann auch noch als BMP

MfG,
Bug
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Unicode erkennen

  Alt 1. Aug 2008, 21:32
Man kann nicht hundertprozentig zwischen Unicode und ANSI unterscheiden. Siehe dazu Raymond Chen:
http://blogs.msdn.com/oldnewthing/ar.../24/95235.aspx
und
http://blogs.msdn.com/oldnewthing/ar...7/2158334.aspx
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Unicode erkennen

  Alt 1. Aug 2008, 22:05
@Luckie: Ist das die GEschichte, dass man kein "Blödsinn" mit Notpad schreiben kann? Zumindest unter XP, bei Vista geht das mitlerweile. Aber darum eghts hier glaube ich gar nicht. Wenn eine Prozedur einen String-Parameter erwartet, und man da einen Widestring reinpackt, dann wird der 2-Byte-Zeichensatz auf den 1-Byte-Zeichensatz gemappt. Das geht bei normalen Texten ganz gut, aber alles was nicht in ein Byte reinpasst, wird zu "?". In der Prozedur kommt dann nichts mehr mit Unicode an.

Ist vielleicht vergleichbar mit einer Prozedur, die einen Byte-Parameter erwartet und der man einen Integer übergibt. Solange der Integer kleiner als 256 ist, ist alles ok, danach geht Information verloren.
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Unicode erkennen

  Alt 1. Aug 2008, 22:16
Zitat von Zacherl:
ich brauche eine Funktion, mit der ich erkennen kann, ob in einem String Unicode Zeichen vorhanden sind.
Er muss also Unicode erkennen, um dann entscheiden zu können, welche Funktion er aufrufen muss.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:10 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