Member 14000611 Ответов: 1

Кто-нибудь знает, почему stream reader не читает символы верхнего индекса(VB.NET)


Я использую StreamReader для импорта данных из текстового файла Tab Delim в таблицу данных под названием Import Data. По некоторым причинам ни один из символов верхнего индекса не читается после его импорта в таблицу.

Например, если у меня есть значение ProductName "Universal 360° Rotating Finger Ring Holder" в текстовом файле, то после импорта значение становится похожим на "Universal 360� Rotating Finger Ring Holder", то же самое происходит и с другими символами, такими как"®,™".

Это как - то связано с моим кодом?

Что я уже пробовал:

Public Function FillData(ByVal Fpath As String) As Boolean
        Dim XRead As System.IO.StreamReader = New IO.StreamReader(FilePath)
        Dim XLine As String = Nothing
        Dim XSplitLine() As String
        Dim i As Integer = ImportedData.Rows.Count + 1
        Try
            XRead.ReadLine()
            XLine = XRead.ReadLine()
            Do Until XLine Is Nothing

                XLine = i & vbTab & XLine & vbTab & FilePath
                XSplitLine = XLine.Split(CType(vbTab, Char()))

                ImportedData.Rows.Add(XSplitLine)
                XLine = XRead.ReadLine
                i += 1
            Loop
            XRead.Close()

        Catch ex As Exception
            MessageBox.Show("Error")
            Return False
            Exit Function
        End Try

        Return True
    End Function

CHill60

Когда вы создаете новый поток streamreader определить кодировку, которая распознает Юникод

1 Ответов

Рейтинг:
5

CHill60

Я не согласен с решением 1. цитата из Кодирование.Свойство По Умолчанию (System.Text) | Microsoft Docs[^]

Цитата:
Different computers can use different encodings as the default, and the default encoding can change on a single computer. If you use the Default encoding to encode and decode data streamed between computers or retrieved at different times on the same computer, it may translate that data incorrectly. In addition, the encoding returned by the Default property uses best-fit fallback to map unsupported characters to characters supported by the code page. For these reasons, using the default encoding is not recommended. To ensure that encoded bytes are decoded properly, you should use a Unicode encoding, such as UTF8Encoding or UnicodeEncoding. You could also use a higher-level protocol to ensure that the same format is used for encoding and decoding.
Я бы явно использовал
Dim XRead As System.IO.StreamReader = New IO.StreamReader(FilePath, System.Text.Encoding.UnicodeEncoding)
Для получения дополнительной информации см. Класс Кодирования (System.Text) | Microsoft Docs[^]


Alek Massey

Хороший выбор, я отзываю свое ошибочное решение.

CHill60

Мы согласны не соглашаться! В этом вся прелесть такого форума, как этот. По крайней мере, вы предложили ОП путь к их решению ... больше никто не беспокоился - так что спасибо

Member 14000611

Спасибо вам всем за ваше время и помощь. Очень ценю.