以下に更新
VB.NET で BinaryReader を使用してバイナリ ファイルを読み込んでいます。ファイル内の各行の構造は次のとおりです。
"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 にシリアル化しようとしていますが、これらの非準拠文字で失敗しています。配列をループすることはできますが、置換の方法がわかりません。
アップデート:
これは、以下の男性/ギャルからの多くの助けを借りて私がいる場所です. 最初のソリューションは機能しますが、期待したほど柔軟ではありません。2 番目のソリューションは 1 つのユース ケースで失敗しますが、はるかに一般的です。
広告 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