2010-09-28 18 views
-1

J'ai pris en charge une application dans l'entreprise pour laquelle je travaille. Tout d'un coup, le client veut pouvoir entrer une marque déposée dans un champ de nom. Le symbole, en utilisant ALT + 0174, est enregistré correctement, mais l'application ne l'encodage pas correctement. Essentiellement ce que je fais:Comment afficher un symbole de marque déposée (®) à l'aide de VB.NET?

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 sortie que je reçois de ce code est la suivante:

John Smith ??

Tout va bien, sauf le "??" après "Smith" devrait être "®". Quel est le meilleur moyen, le cas échéant, d'afficher correctement le symbole?

Répondre

2

Dim strReturn As String = System.Text.ASCIIEncoding.ASCII.GetString (b)

Vous codé XML en UTF-8, ne le lisez pas de retour en ASCII. Vous perdrez tous les caractères spéciaux qui ne peuvent pas être encodés. Fix:

Dim strReturn As String = System.Text.Encoding.UTF8.GetString(b) 
+0

Wow ... c'est aussi simple que ça! Merci beaucoup ... ça a marché! – LDWisdom