none
Acentuação em ascii RRS feed

  • Pergunta

  • Falae pessoal.
    Estou pegando um xml de uma empresa e refazendo-o de acordo com o padrão de xml da minha empresa. Isto está ok! Porém, o único problema é que o xml da empresa vem com o código ascii do acento. Ex: ginástica. Tem alguma maneira para conseguir transformar isso para acentuação normal (ginástica)? Talvez tenha algo a ver com o encoding. O encoding da empresa é UTF-8 e o meu é ISO-8859-1.

    Desde já agradeço!
    quinta-feira, 3 de dezembro de 2009 12:28

Respostas

  • Acabei fazendo na mão uma classe que faz isso hauishdfuaisdhfai. Pra quem interessar:

    public class Troca
        {
            private Dictionary<string, string> dicTroca;
    
            public Troca()
            {
                dicTroca = new Dictionary<string, string>();
                dicTroca.Add("&#033;", "!");
                dicTroca.Add("&#035;", "#");
                dicTroca.Add("&#036;", "$");
                dicTroca.Add("&#037;", "%");
                dicTroca.Add("&#038;", "&");
                dicTroca.Add("&#039;", "'");
                dicTroca.Add("&#040;", "(");
                dicTroca.Add("&#041;", ")");
                dicTroca.Add("&#058;", ":");
                dicTroca.Add("&#059;", ";");
                dicTroca.Add("&#060;", "<");
                dicTroca.Add("&#061;", "=");
                dicTroca.Add("&#062;", ">");
                dicTroca.Add("&#063;", "?");
                dicTroca.Add("&#064;", "@");
                dicTroca.Add("&#091;", "[");
                dicTroca.Add("&#093;", "]");
                dicTroca.Add("&#094;", "^");
                dicTroca.Add("&#095;", "_");
                dicTroca.Add("&#123;", "{");
                dicTroca.Add("&#125;", "}");
                dicTroca.Add("&#126;", "~");
                dicTroca.Add("&#192;", "À");
                dicTroca.Add("&#193;", "Á");
                dicTroca.Add("&#194;", "Â");
                dicTroca.Add("&#195;", "Ã");            
                dicTroca.Add("&#199;", "Ç");
                dicTroca.Add("&#200;", "È");
                dicTroca.Add("&#201;", "É");
                dicTroca.Add("&#202;", "Ê");
                dicTroca.Add("&#204;", "Ì");
                dicTroca.Add("&#205;", "Í");
                dicTroca.Add("&#206;", "Î");            
                dicTroca.Add("&#209;", "Ñ");
                dicTroca.Add("&#210;", "Ò");
                dicTroca.Add("&#211;", "Ó");
                dicTroca.Add("&#212;", "Ô");
                dicTroca.Add("&#213;", "Õ");            
                dicTroca.Add("&#217;", "Ù");
                dicTroca.Add("&#218;", "Ú");
                dicTroca.Add("&#219;", "Û");            
                dicTroca.Add("&#224;", "à");
                dicTroca.Add("&#225;", "á");
                dicTroca.Add("&#226;", "â");
                dicTroca.Add("&#227;", "ã");            
                dicTroca.Add("&#231;", "ç");
                dicTroca.Add("&#232;", "è");
                dicTroca.Add("&#233;", "é");
                dicTroca.Add("&#234;", "ê");
                dicTroca.Add("&#236;", "ì");
                dicTroca.Add("&#237;", "í");
                dicTroca.Add("&#238;", "î");            
                dicTroca.Add("&#241;", "ñ");
                dicTroca.Add("&#242;", "ò");
                dicTroca.Add("&#243;", "ó");
                dicTroca.Add("&#244;", "ô");
                dicTroca.Add("&#245;", "õ");            
                dicTroca.Add("&#249;", "ù");
                dicTroca.Add("&#250;", "ú");
                dicTroca.Add("&#251;", "û");
            }
    
            public string RetornaFraseSemASCII(string frase)
            {
                StringBuilder fraseFormatada = new StringBuilder();
    
                for (int i = 0; i < frase.Length; i++)
                {
                    if (frase[i] == '&' && frase[i+1] == '#')
                    {
                        fraseFormatada.Append(this.TrocarCodigoPorLetra(string.Format("{0}{1}{2}{3}{4}{5}", frase[i], frase[i + 1], frase[i + 2], frase[i + 3], frase[i + 4], frase[i + 5])));
                        i = i + 5;
                    }
                    else
                        fraseFormatada.Append(frase[i]);
                }
                return fraseFormatada.ToString();
    
            }
            private string TrocarCodigoPorLetra(string ascii)
            {
                if (dicTroca.ContainsKey(ascii))
                {
                    return dicTroca[ascii];
                }
                return string.Empty;
            }
        }
    Até!
    • Marcado como Resposta Reinaldo Camargo quinta-feira, 3 de dezembro de 2009 18:59
    quinta-feira, 3 de dezembro de 2009 18:29

Todas as Respostas

  • Se algm conseguir passar pelo menos uma palavra com acentuação ascii para normal só pra me dar um idéia já está ótimo. ;)
    quinta-feira, 3 de dezembro de 2009 12:38
  • Cara já tentou algo como:

    Server.HtmlDecode
    Server.HtmlEncode

    Talvez resolva seu problema, senão vai precisar Encoding mesmo.

    Abraços

    quinta-feira, 3 de dezembro de 2009 12:44
  • Não consegui encontrar esse Server... e o link q vc passou não tem mto a ver como o q eu queria... Mas valeu msm assim! Se tiver alguma outra idéia me fale!
    quinta-feira, 3 de dezembro de 2009 12:54
  • Reinaldo,

    Você pode tentar isso, mais ai você muda para os Encoding que você precisa.

    string unicodeString = "This string contains the unicode character Pi(\u03a0)";

             // Create two different encodings.
             Encoding ascii = Encoding.ASCII;
             Encoding unicode = Encoding.Unicode;

             // Convert the string into a byte[].
             byte[] unicodeBytes = unicode.GetBytes(unicodeString);

             // Perform the conversion from one encoding to the other.
             byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);

             // Convert the new byte[] into a char[] and then into a string.
             // This is a slightly different approach to converting to illustrate
             // the use of GetCharCount/GetChars.
             char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
             ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
             string asciiString = new string(asciiChars);

             // Display the strings created before and after the conversion.
             Console.WriteLine("Original string: {0}", unicodeString);
             Console.WriteLine("Ascii converted string: {0}", asciiString);

    quinta-feira, 3 de dezembro de 2009 13:12
  • Testei com gin&#225;stica e não funcionou =/
    quinta-feira, 3 de dezembro de 2009 13:22
  • Fale,

    Testa colocar no page_load

    Response.ContentEncoding = System.Text.

    Encoding.UTF8;
    Response.Charset =
    "utf-8";

    Abraço!


    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
    quinta-feira, 3 de dezembro de 2009 13:30
  • Eu testei desta forma e funcionou, vou fazer outro teste com o examplo acima e posto caso de certo.

    dim

     

    unicodeString as string
    unicodeString = "gin&#225;stica"
    response.Write(Server.HtmlDecode(unicodeString))

    quinta-feira, 3 de dezembro de 2009 13:33
  • Assim também funcionou.

    string unicodeString = "This string contains the unicode character Pi(\u03a0)";

             // Create two different encodings.
             Encoding ascii = Encoding.ASCII;
             // modifica para o encoding
             Encoding unicode = Encoding.GetEncoding("ISO-8859-1");

     



             // Convert the string into a byte[].
             byte[] unicodeBytes = unicode.GetBytes(unicodeString);

             // Perform the conversion from one encoding to the other.
             byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);

             // Convert the new byte[] into a char[] and then into a string.
             // This is a slightly different approach to converting to illustrate
             // the use of GetCharCount/GetChars.
             char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
             ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
             string asciiString = new string(asciiChars);

             // Display the strings created before and after the conversion.
             Console.WriteLine("Original string: {0}", unicodeString);
             Console.WriteLine("Ascii converted string: {0}", asciiString);

    quinta-feira, 3 de dezembro de 2009 13:41
  • Os testes devem ser feitos por uma aplicação console, pq é gerado um xml. Se você testar com asp.net ele consegue converter automaticamente...
    quinta-feira, 3 de dezembro de 2009 13:48
  • Acabei fazendo na mão uma classe que faz isso hauishdfuaisdhfai. Pra quem interessar:

    public class Troca
        {
            private Dictionary<string, string> dicTroca;
    
            public Troca()
            {
                dicTroca = new Dictionary<string, string>();
                dicTroca.Add("&#033;", "!");
                dicTroca.Add("&#035;", "#");
                dicTroca.Add("&#036;", "$");
                dicTroca.Add("&#037;", "%");
                dicTroca.Add("&#038;", "&");
                dicTroca.Add("&#039;", "'");
                dicTroca.Add("&#040;", "(");
                dicTroca.Add("&#041;", ")");
                dicTroca.Add("&#058;", ":");
                dicTroca.Add("&#059;", ";");
                dicTroca.Add("&#060;", "<");
                dicTroca.Add("&#061;", "=");
                dicTroca.Add("&#062;", ">");
                dicTroca.Add("&#063;", "?");
                dicTroca.Add("&#064;", "@");
                dicTroca.Add("&#091;", "[");
                dicTroca.Add("&#093;", "]");
                dicTroca.Add("&#094;", "^");
                dicTroca.Add("&#095;", "_");
                dicTroca.Add("&#123;", "{");
                dicTroca.Add("&#125;", "}");
                dicTroca.Add("&#126;", "~");
                dicTroca.Add("&#192;", "À");
                dicTroca.Add("&#193;", "Á");
                dicTroca.Add("&#194;", "Â");
                dicTroca.Add("&#195;", "Ã");            
                dicTroca.Add("&#199;", "Ç");
                dicTroca.Add("&#200;", "È");
                dicTroca.Add("&#201;", "É");
                dicTroca.Add("&#202;", "Ê");
                dicTroca.Add("&#204;", "Ì");
                dicTroca.Add("&#205;", "Í");
                dicTroca.Add("&#206;", "Î");            
                dicTroca.Add("&#209;", "Ñ");
                dicTroca.Add("&#210;", "Ò");
                dicTroca.Add("&#211;", "Ó");
                dicTroca.Add("&#212;", "Ô");
                dicTroca.Add("&#213;", "Õ");            
                dicTroca.Add("&#217;", "Ù");
                dicTroca.Add("&#218;", "Ú");
                dicTroca.Add("&#219;", "Û");            
                dicTroca.Add("&#224;", "à");
                dicTroca.Add("&#225;", "á");
                dicTroca.Add("&#226;", "â");
                dicTroca.Add("&#227;", "ã");            
                dicTroca.Add("&#231;", "ç");
                dicTroca.Add("&#232;", "è");
                dicTroca.Add("&#233;", "é");
                dicTroca.Add("&#234;", "ê");
                dicTroca.Add("&#236;", "ì");
                dicTroca.Add("&#237;", "í");
                dicTroca.Add("&#238;", "î");            
                dicTroca.Add("&#241;", "ñ");
                dicTroca.Add("&#242;", "ò");
                dicTroca.Add("&#243;", "ó");
                dicTroca.Add("&#244;", "ô");
                dicTroca.Add("&#245;", "õ");            
                dicTroca.Add("&#249;", "ù");
                dicTroca.Add("&#250;", "ú");
                dicTroca.Add("&#251;", "û");
            }
    
            public string RetornaFraseSemASCII(string frase)
            {
                StringBuilder fraseFormatada = new StringBuilder();
    
                for (int i = 0; i < frase.Length; i++)
                {
                    if (frase[i] == '&' && frase[i+1] == '#')
                    {
                        fraseFormatada.Append(this.TrocarCodigoPorLetra(string.Format("{0}{1}{2}{3}{4}{5}", frase[i], frase[i + 1], frase[i + 2], frase[i + 3], frase[i + 4], frase[i + 5])));
                        i = i + 5;
                    }
                    else
                        fraseFormatada.Append(frase[i]);
                }
                return fraseFormatada.ToString();
    
            }
            private string TrocarCodigoPorLetra(string ascii)
            {
                if (dicTroca.ContainsKey(ascii))
                {
                    return dicTroca[ascii];
                }
                return string.Empty;
            }
        }
    Até!
    • Marcado como Resposta Reinaldo Camargo quinta-feira, 3 de dezembro de 2009 18:59
    quinta-feira, 3 de dezembro de 2009 18:29