ОБНОВЛЕНО НИЖЕ
Я читаю двоичный файл, используя BinaryReader в VB.NET.
Структура каждой строки в файле:
"Category" = 1 byte
"Code" = 1 byte
"Text" = 60 Bytes
Dim Category As Byte
Dim Code As Byte
Dim byText() As Byte
Dim chText() As Char
Dim br As New BinaryReader(fs)
Category = br.ReadByte()
Code = br.ReadByte()
byText = br.ReadBytes(60)
chText = encASCII.GetChars(byText)
Проблема в том, что в поле «Текст» есть несколько прикольных символов, используемых для заполнения.
В основном это нулевые символы 0x00.
Есть ли способ избавиться от этих символов 0x00 с помощью некоторой кодировки?
В противном случае, как я могу выполнить замену массива chText, чтобы избавиться от символов 0x00?
Я пытаюсь сериализовать результирующий набор данных в XML, и он не работает на этих несовместимых символах.
Я могу пройти через массив, однако я не могу понять, как сделать замену?
UPDATE:
Это то, где я нахожусь с большой помощью парней / девочек ниже.
Первое решение работает, но не так гибко, как я надеялся, второе не подходит для одного варианта использования, но гораздо более универсально.
Объявление 1) Я могу решить эту проблему, передав строку в эту подпрограмму
Public Function StripBad(ByVal InString As String) As String
Dim str As String = InString
Dim sb As New System.Text.StringBuilder
strNew = strNew.Replace(chBad, " ")
For Each ch As Char In str
If StrComp(ChrW(Val("&H25")), ch) >= 0 Then
ch = " "
End If
sb.Append(ch)
Next
Return sb.ToString()
End Function
Объявление 2) Эта процедура вынимает несколько оскорбительных символов, но не работает для 0x00
Это было адаптировано из MSDN, http://msdn.microsoft.com/en-us/library/kdcak6ye.aspx.
Public Function StripBadwithConvert(ByVal InString As String) As String
Dim unicodeString As String
unicodeString = InString
' Create two different encodings.
Dim ascii As Encoding = Encoding.ASCII
Dim [unicode] As Encoding = Encoding.UTF8
' Convert the string into a byte[].
Dim unicodeBytes As Byte() = [unicode].GetBytes(unicodeString)
Dim asciiBytes As Byte() = Encoding.Convert([unicode], ascii, unicodeBytes)
Dim asciiChars(ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length) - 1) As Char
ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0)
Dim asciiString As New String(asciiChars)
Return asciiString
End Function