Как отобразить символ зарегистрированного товарного знака (®) с помощью VB.NET? - PullRequest
0 голосов
/ 28 сентября 2010

Я взял на себя поддержку приложения в компании, в которой я работаю.Внезапно клиент хочет иметь возможность ввести зарегистрированный товарный знак в поле имени.Символ, используя ALT + 0174, сохраняется правильно, но приложение неправильно его кодирует.По сути, это то, что я делаю:

    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

Вывод, который я получаю из этого кода:11111

Все нормально, кроме "??"после «Смит» должно быть «®».Каков наилучший способ, если таковые имеются, для правильного отображения символа?

1 Ответ

2 голосов
/ 28 сентября 2010

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

Вы закодировали XML в UTF-8, не считывайте его как ASCII. Вы потеряете все специальные символы, которые не могут быть закодированы. Исправлено:

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