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?

¿Fue útil?

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top