![]() |
(Unicode) Sonderzeichen in Grundbuchstaben umwandeln
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). |
Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln
Die von dir erwähnten Sonderzeichen sind doch auch in der ACSII Tabelle zu finden:
![]() 0224 ist dein à ... also wandelst du einfach ascii 0224 in 0097 a um ? oder versteh ich das problem jetzt falsch? |
Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln
Hallo,
ich befürchte, das musst Du selbst regeln. Ich habe eine ![]() Vielleicht hilft sie Dir etwas. @Andi1985 Er will eine Automatik für die Konvertierung 224 > 97. Gruß Jürgen |
Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln
Hallo,
da habe ich nur das:
Delphi-Quellcode:
Vielleicht ist's ja schonmal ein Ansatz.
// 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; |
Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln
Für Unicode gibt es die Datei
![]() 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 |
Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln
Zitat:
|
Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln
Oh Mann, Jungs, ihr seit Spitze. In C# gibt es ja eine Lösung, dachte das das auch für Delphi gilt
|
Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln
Wie sieht denn diese C# Lösung aus?
Sherlock |
Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln
Code:
Vorhin gefunden
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)); } |
Re: (Unicode) Sonderzeichen in Grundbuchstaben umwandeln
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 ;) ![]() Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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 by Thomas Breitkreuz