Usuário com melhor resposta
Como exibir Unicode em um textbox ou label C# WinForm

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
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:
- Marcado como Resposta J.AndersonSantos quinta-feira, 28 de maio de 2015 12:46