2009-08-13 13 views
8

tengo que sustituir acentos en la cadena a sus equivalentes en inglés¿Cómo reemplazo acentos (alemán) en .NET

por ejemplo

a = ae

O = oe

O = Oe

U = ue

sé despojar de ellos de st anillo, pero no estaba al tanto sobre el reemplazo.

Háganme saber si tiene alguna sugerencia. Estoy codificando en C#

Respuesta

3

No se me ocurre ninguna forma automática de hacerlo, así que creo que tendrías que hacerlo manualmente.

es decir.

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

¿Cuántos caracteres hay? Todas las vocales, en mayúscula y minúscula, entonces, ¿10? No debería ser demasiado trabajo.

0

Cómo sobre el uso String.Replace:

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

(bueno, no es una verdadera palabra alemana, pero no pude resistir)

Se pueden ingresar las llamadas en cadena para reemplazar como esto

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

En realidad M ** O ** törhead;) –

8

¿Quiere simplemente un mapeo de diéresis alemanas para la variante de dos letras (sin diéresis)? Aqui tienes; no probado, pero maneja todas las diéresis alemanas.

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

Si necesita utilizar esto en cadenas más grandes, varias llamadas a Replace() ineficientes pueden obtener con bastante rapidez. Usted puede ser mejor de la reconstrucción de su carácter por carácter de la cadena:

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

buena solución. Lo extendí para manejar todo el ISO-8859-1: http://codepad.org/dUMpGlgg – primo

Cuestiones relacionadas