none
Como exibir Unicode em um textbox ou label C# WinForm RRS feed

  • Pergunta

  • Bom dia pessoal, estou com a necessidade de realizar a formatação de fórmulas químicas na minha aplicação, para adicionar os valores em subscritos estou utilizando um conversão unicode e atribuindo tudo a uma string, porém na hora de exibir o valores o código unicode não é convertido em carácter permanecendo apenas o código, como posso fazer essa exibição. Segue meu código e algumas imagens.

    private void txtFormulaMolecular_Leave(object sender, EventArgs e)
            {
                char[] formulaMolecular = txtFormulaMolecular.Text.ToCharArray();
                string formulaFormatada = string.Empty;
    
                for (int i = 0; i < formulaMolecular.Length; i++)
                {
                    if (i > 0)
                    {
                        if (Char.IsNumber(formulaMolecular[i]))
                        {
                            //Caso o caracter anterior seja igual a '.' ou seja multiplicação mantém o número
                            if (formulaMolecular[i - 1] == '.')
                                formulaFormatada += formulaMolecular[i].ToString();
                            
                            //Caso contrário obtém o unicode do mesmo e atribui a string
                            else
                                formulaFormatada += ConverSubscript(formulaMolecular[i]);
                        }
                        else
                        {
                            formulaFormatada += formulaMolecular[i].ToString();
                        }
                    }
                    else
                    {
                        formulaFormatada = formulaMolecular[i].ToString();
                    }
                }
    
                txtFormulaMolecular.Text = formulaFormatada;
            }
    
            private string ConverSubscript(char number)
            {
                string unicode = "";
    
                switch (number)
                {
                    case('0'):
                        unicode = "\\u2080";
                        break;
    
                    case ('1'):
                        unicode = "\\u2081";
                        break;
    
                    case ('2'):
                        unicode = "\\u2082";
                        break;
    
                    case ('3'):
                        unicode = "\\u2083";
                        break;
    
                    case ('4'):
                        unicode = "\\u2084";
                        break;
    
                    case ('5'):
                        unicode = "\\u2085";
                        break;
    
                    case ('6'):
                        unicode = "\\u2086";
                        break;
    
                    case ('7'):
                        unicode = "\\u2087";
                        break;
    
                    case ('8'):
                        unicode = "\\u2088";
                        break;
    
                    case ('9'):
                        unicode = "\\u2089";
                        break;
                }
    
                return unicode;
            }


    Entrada de valores

    Saída e resultado desejado

    Deste já agradeço

    quinta-feira, 28 de maio de 2015 12:05

Respostas

  • Pessoal consegui resolver, segue o código abaixo. Encontrei a solução em Converting Unicode strings to escaped ascii string

            private void txtFormulaMolecular_Leave(object sender, EventArgs e)
            {
                char[] formulaMolecular = txtFormulaMolecular.Text.ToCharArray();
                string formulaFormatada = string.Empty;
    
                for (int i = 0; i < formulaMolecular.Length; i++)
                {
                    if (i > 0)
                    {
                        if (Char.IsNumber(formulaMolecular[i]))
                        {
                            //Caso o caracter anterior seja igual a '.' ou seja multiplicação mantém o número
                            if (formulaMolecular[i - 1] == '.')
                                formulaFormatada += formulaMolecular[i].ToString();
                            
                            //Caso contrário obtém o unicode do mesmo e atribui a string
                            else
                                formulaFormatada += ConverSubscript(formulaMolecular[i]);
                        }
                        else
                        {
                            formulaFormatada += formulaMolecular[i].ToString();
                        }
                    }
                    else
                    {
                        formulaFormatada = formulaMolecular[i].ToString();
                    }
                }
    
                txtFormulaMolecular.Text = DecodeEncodedNonAsciiCharacters(formulaFormatada);
            }
    
            private string ConverSubscript(char number)
            {
                string unicode = "";
    
                switch (number)
                {
                    case('0'):
                        unicode = "\\u2080";
                        break;
    
                    case ('1'):
                        unicode = "\\u2081";
                        break;
    
                    case ('2'):
                        unicode = "\\u2082";
                        break;
    
                    case ('3'):
                        unicode = "\\u2083";
                        break;
    
                    case ('4'):
                        unicode = "\\u2084";
                        break;
    
                    case ('5'):
                        unicode = "\\u2085";
                        break;
    
                    case ('6'):
                        unicode = "\\u2086";
                        break;
    
                    case ('7'):
                        unicode = "\\u2087";
                        break;
    
                    case ('8'):
                        unicode = "\\u2088";
                        break;
    
                    case ('9'):
                        unicode = "\\u2089";
                        break;
                }
    
                return unicode;
            }
    
            private string DecodeEncodedNonAsciiCharacters(string value)
            {
                return Regex.Replace(
                    value,
                    @"\\u(?<Value>[a-zA-Z0-9]{4})",
                    m =>
                    {
                        return ((char)int.Parse(m.Groups["Value"].Value, NumberStyles.HexNumber)).ToString();
                    });
            }

    Resultado:

    quinta-feira, 28 de maio de 2015 12:46