2009-08-13 9 views
8

ho bisogno di sostituire gli accenti nella stringa ai loro equivalenti inglesiCome si sostituisce accenti (Tedesco) in .NET

ad esempio

ä = ae

ö = OE

Ö = Oe

ü = ue

so per togliere di loro da st squillare ma non ero a conoscenza della sostituzione.

Per favore fatemi sapere se avete qualche suggerimento. Sto codificando in C#

risposta

3

Non riesco a pensare a un modo automatico per farlo, quindi credo che dovresti farlo manualmente.

ie.

string GermanString = "äö"; 
GermanString = GermanString.Replace("ä", "ae"); 
GermanString = GermanString.Replace("ö", "oe"); 

Quanti personaggi ci sono? Tutte le vocali, in lettere maiuscole e minuscole, quindi 10? Non dovrebbe essere troppo di un lavoro.

0

Come sull'utilizzo String.Replace:

string germanText = "Mötörhead"; 
string replaced = germanText.Replace("ö", "oe"); 

(ok, non è una vera e propria parola tedesca, ma non ho potuto resistere)

puoi chiamate a catena per sostituire in questo modo

someText.Replace("ö", "oe").Replace("ä", "ae").Replace("ö", "oe")... 
+4

In realtà M ** o ** törhead;) –

8

Vuoi solo una mappatura delle dieresi tedesche per la variante a due lettere (non ombreggiata)? Ecco qui; non testato, ma gestisce tutte le dieresi tedesche.

String replaceGermanUmlauts(String s) { 
    String t = s; 
    t = t.Replace("ä", "ae"); 
    t = t.Replace("ö", "oe"); 
    t = t.Replace("ü", "ue"); 
    t = t.Replace("Ä", "Ae"); 
    t = t.Replace("Ö", "Oe"); 
    t = t.Replace("Ü", "Ue"); 
    t = t.Replace("ß", "ss"); 
    return t; 
} 
28

Se avete bisogno di utilizzare questo su corde più grandi, più chiamate a Replace() possono ottenere inefficiente abbastanza rapidamente. Si può essere meglio ricostruire la stringa di caratteri per carattere:

var map = new Dictionary<char, string>() { 
    { 'ä', "ae" }, 
    { 'ö', "oe" }, 
    { 'ü', "ue" }, 
    { 'Ä', "Ae" }, 
    { 'Ö', "Oe" }, 
    { 'Ü', "Ue" }, 
    { 'ß', "ss" } 
}; 

var res = germanText.Aggregate(
       new StringBuilder(), 
       (sb,c) => 
       { 
       string r; 
       if(map.TryGetValue(c, out r)) 
        return sb.Append(r); 
       else 
        return sb.Append(c); 
       }).ToString(); 
+3

buona soluzione. L'ho esteso per gestire tutto ISO-8859-1: http://codepad.org/dUMpGlgg – primo

Problemi correlati