AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein (Unicode) Sonderzeichen in Grundbuchstaben umwandeln

(Unicode) Sonderzeichen in Grundbuchstaben umwandeln

Ein Thema von alzaimar · begonnen am 13. Okt 2008 · letzter Beitrag vom 13. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2   
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

(Unicode) Sonderzeichen in Grundbuchstaben umwandeln

  Alt 13. Okt 2008, 12:10
Hi Leute,

Folgendes Problem:

Vorname, Zuname in Email-Adresse verwandeln. Ist ja nicht schwer. Nur leider sind auch Tschechen, Polen und Franzosen am Start, nicht zu vergessen die Schweden und Spanier, und die haben in ihren Namen Sonderzeichen, aus denen man keine EMail-Adresse basteln kann.

Nun möchte mein Kunde die äàá usw in 'a', die öóò in 'o' usw. Natürlich nicht nur die uns bekannten Sonderzeichen, sondern auch die A-Kringel (aus Schweden), die l-Strichdurch aus Polen usw....

Gibt es da eine Unicode-Funktion oder irgendeine Tabelle, nach der man vorgehen kann? Oder muss man sich das per Hand zusammenbasteln?

Beispiel: Jörg Mørgens => 'Jorg.Morgens' (also kein ö => oe usw).
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Andi1985
Andi1985

Registriert seit: 11. Mai 2007
Ort: NRW
116 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln

  Alt 13. Okt 2008, 12:16
Die von dir erwähnten Sonderzeichen sind doch auch in der ACSII Tabelle zu finden:

http://www.torsten-horn.de/techdocs/ascii.htm

0224 ist dein à ...

also wandelst du einfach ascii 0224 in 0097 a um ?

oder versteh ich das problem jetzt falsch?
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#3

Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln

  Alt 13. Okt 2008, 12:20
Hallo,

ich befürchte, das musst Du selbst regeln. Ich habe eine Liste "aller" UniCode-Chars und der UnicodeCategory zusammengestellt (genauer: zwei Textdateien); daraus kann ich aber kein Schema für Deine Bedürfnisse ableiten.

Vielleicht hilft sie Dir etwas.

@Andi1985
Er will eine Automatik für die Konvertierung 224 > 97.

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln

  Alt 13. Okt 2008, 12:32
Hallo,

da habe ich nur das:
Delphi-Quellcode:
// Wandelt den übergebenen Buchstaben in Kleinbuchstaben um.
// Umlaute werden aufgelöst.
// Hierbei wird nur der ASCII-Zeichensatz verwendet.
// Der Rückgabewert ist True, wenn eine Umwandlung erfolgen konnte,
// andernfalls enthält sResult einen Leerstring.
function getLowerCase(ch : Char; Var sResult : String) : Boolean;
begin
  case ch Of
    'a'..'z'                      : sResult := ch;
    'A'..'Z'                      : sResult := LowerCase(ch);
    'À{ A mit Accent grave },
    'à{ a mit Accent grave },
    'Á{ A mit Accent acute },
    'á{ a mit Accent acute },
    'Â{ A mit Circumflex },
    'â{ a mit Circumflex },
    'Ã{ A mit Tilde },
    'ã{ a mit Tilde },
    'Å{ A mit Ring },
    'å{ a mit Ring },
    'Æ{ A mit legiertem E },
    'æ{ a mit legiertem e },
    'Ä{ A Umlaut },
    'ä{ a Umlaut }              : sResult := 'a';
    'Ç{ C mit Häkchen },
    'ç{ c mit Häkchen }         : sResult := 'c';
    'È{ E mit Accent grave },
    'è{ e mit Accent grave },
    'É{ E mit Accent acute },
    'é{ e mit Accent acute },
    'Ê{ E mit Circumflex },
    'ê{ e mit Circumflex },
    'Ë{ E Umlaut },
    'ë{ e Umlaut }              : sResult := 'e';
    'Ì{ I mit Accent grave },
    'ì{ i mit Accent grave },
    'Í{ I mit Accent acute },
    'í{ i mit Accent acute },
    'Î{ I mit Circumflex },
    'î{ i mit Circumflex },
    'Ï{ I Umlaut },
    'ï{ i Umlaut }              : sResult := 'i';
    'Ñ{ N mit Tilde },
    'ñ{ n mit Tilde }           : sResult := 'n';
    'Ò{ O mit Accent grave },
    'ò{ o mit Accent grave },
    'Ó{ O mit Accent acute },
    'ó{ o mit Accent acute },
    'Ô{ O mit Circumflex },
    'ô{ o mit Circumflex },
    'Ø{ O mit Schrägstrich },
    'ø{ o mit Schrägstrich },
    'Õ{ O mit Tilde },
    'õ{ o mit Tilde },
    'Ö{ O Umlaut },
    'ö{ o Umlaut }              : sResult := 'o';
    'Ù{ U mit Accent grave },
    'ù{ u mit Accent grave },
    'Ú{ U mit Accent acute },
    'ú{ u mit Accent acute },
    'Û{ U mit Circumflex },
    'û{ u mit Circumflex },
    'Ü{ U Umlaut },
    'ü{ u Umlaut }              : sResult := 'u';
    'ß{ scharfes S }            : sResult := 'ss';
    'ý{ y mit Accent acute },
    'Ý{ Y mit Accent acute },
    'ÿ{ y Umlaut }              : sResult := 'y';
    'þ{ thorn (isländisch) },
    'Þ{ THORN (isländisch) },
    'Ð{ Eth (isländisch) },
    'ð{ eth (isländisch) }      : sResult := AnsiLowerCase(ch);
  Else
    sResult := '';
  end;
  Result := not (sResult = '');
end;
Vielleicht ist's ja schonmal ein Ansatz.
  Mit Zitat antworten Zitat
jottkaerr

Registriert seit: 2. Jul 2007
Ort: Tuttlingen
80 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln

  Alt 13. Okt 2008, 13:57
Für Unicode gibt es die Datei UnicodeData.txt, in der die benötigten Informationen enthalten sind. Das ist mehr oder weniger eine CSV-Datei mit Semikolon als Feldtrenner. Im ersten Feld steht die Nummer des Unicode-Zeichens, im zweiten sein offizieller Name und im sechsten eine Liste der Unicode-Zeichen, in die es zerlegt werden kann. Das erste dieser Zeichen sollte dabei immer ein "normaler" Buchstabe sein. [edit]Ich habe gerade gesehen, dass am Anfang dieses Felds noch eine Angabe in spitzen Klammern stehen kann. Diese kannst Du ignorieren.[/edit]

Es gilt aber, ein paar Fallstricke zu beachten. Zum einen ist nicht jedes Zeichen in einen Basisbuchstaben und ein oder mehrere Diakritika zerlegbar (z.B. das skandinavische Ø oder das polnische Ł), zum anderen haben natürlich nicht-lateinische, akzentuierte Buchstaben einen nicht-lateinischen Basisbuchstaben (z.B. kyrillisch oder griechisch).

jkr
Jürgen Krämer
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#6

Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln

  Alt 13. Okt 2008, 14:22
Zitat von jottkaerr:
Für Unicode gibt es die Datei UnicodeData.txt, in der die benötigten Informationen enthalten sind.
Wow, das ist es! Danke; ich werde sehen, dass ich es in meine Liste (siehe oben) einbaue. Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln

  Alt 13. Okt 2008, 15:31
Oh Mann, Jungs, ihr seit Spitze. In C# gibt es ja eine Lösung, dachte das das auch für Delphi gilt
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.555 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln

  Alt 13. Okt 2008, 16:06
Wie sieht denn diese C# Lösung aus?

Sherlock
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln

  Alt 13. Okt 2008, 16:13
Code:
static string RemoveDiacritics(string stIn)
{
  string stFormD = stIn.Normalize(NormalizationForm.FormD);
  StringBuilder sb = new StringBuilder();

  for(int i = 0; i < stFormD.Length; i++)
  {
     UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(stFormD[i]);
     if(uc != UnicodeCategory.NonSpacingMark)
       sb.Append(stFormD[i]);
  }   
  return(sb.ToString().Normalize(NormalizationForm.FormC));
}
Vorhin gefunden
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.555 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln

  Alt 13. Okt 2008, 16:24
Dann gehe ich davon aus, daß das auf diese DLL geht C:\WINDOWS\system32\Normaliz.dll

Und die kannst Du doch dann auch in Delphi verwenden

http://msdn.microsoft.com/en-us/library/ms776395.aspx

Sherlock
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf