¿Cómo puedo mostrar un símbolo de marca registrada (®) utilizando VB.NET?
-
26-09-2019 - |
Pregunta
Me he hecho cargo de apoyo de una solicitud en el trabajo de la compañía que para. De repente, el cliente quiere ser capaz de entrar en una marca registrada en un campo de nombre. El símbolo, el uso de ALT + 0174, se guarda correctamente, pero la aplicación no está codificando correctamente. Básicamente, esto es lo que estoy haciendo:
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
Dim ms As New MemoryStream
Dim xml_text_writer As New XmlTextWriter(ms, _
System.Text.Encoding.UTF8)
xml_text_writer.Formatting = Formatting.Indented
xml_text_writer.Indentation = 4
xml_text_writer.WriteStartDocument(True)
xml_text_writer.WriteStartElement("Employees")
MakeEmployee(xml_text_writer, txtFName.Text, txtLName.Text, 11111)
xml_text_writer.WriteEndElement()
xml_text_writer.WriteEndDocument()
xml_text_writer.Flush()
ms.Flush()
ms.Position = 0
Dim b(CInt(ms.Length) - 1) As Byte
ms.Read(b, 0, CInt(ms.Length))
ms.Close()
Dim strReturn As String = System.Text.ASCIIEncoding.ASCII.GetString(b)
If strReturn.StartsWith("???", StringComparison.CurrentCultureIgnoreCase) Then
strReturn = strReturn.Substring(3)
End If
txtName.Text = strReturn
End Sub
Private Sub MakeEmployee(ByVal xml_text_writer As _
XmlTextWriter, ByVal first_name As String, ByVal _
last_name As String, ByVal emp_id As Integer)
xml_text_writer.WriteStartElement("Employee")
xml_text_writer.WriteStartElement("FirstName")
xml_text_writer.WriteString(first_name)
xml_text_writer.WriteEndElement()
xml_text_writer.WriteStartElement("LastName")
xml_text_writer.WriteString(last_name)
xml_text_writer.WriteEndElement()
xml_text_writer.WriteStartElement("EmployeeId")
xml_text_writer.WriteString(emp_id.ToString)
xml_text_writer.WriteEndElement()
xml_text_writer.WriteEndElement()
End Sub
La salida que recibo de este código es la siguiente:
John Herrero ?? 11111
Todo está bien, excepto el "??" después de "Smith" debe ser "®". ¿Cuál es la mejor manera, en su caso, para que aparezca el símbolo correctamente?
Solución
Dim strReturn As String = System.Text.ASCIIEncoding.ASCII.GetString (b)
codifica el XML en UTF-8, no lea de nuevo como ASCII. Si no se pierden todos los caracteres especiales que no pueden ser codificados. Solución:
Dim strReturn As String = System.Text.Encoding.UTF8.GetString(b)