我使用了一些需要解析的EBCDIC数据并找到了一些Hex值。我遇到的问题是,我正在使用不正确的编码读取文件。我可以看到我的记录以“!
”开头(在EBCDIC中是x5A
),但在转换为十六进制时,它返回x21
,这是ASCII值一个“!
”。
我希望框架中有一个内置方法,但我担心我必须创建一个自定义类才能正确映射EBCDIC字符集。
Using fileInStream As New FileStream(inputFile, FileMode.Open, FileAccess.Read)
Using bufferedInStream As New BufferedStream(fileInStream)
Using reader As New StreamReader(bufferedInStream, Encoding.GetEncoding(37))
While Not reader.EndOfStream
Do While reader.Peek() >= 0
Dim charArray(52) As Char
reader.Read(charArray, 0, charArray.Length)
For Each letter As Char In charArray
Dim value As Integer = Convert.ToInt16(letter)
Dim hexOut As String = [String].Format("{0:x}", value)
Debug.WriteLine(hexOut)
Next
Loop
End While
End Using
End Using
End Using
谢谢!
答案 0 :(得分:4)
你可以这样做:
答案 1 :(得分:3)
是的,当您以字符串形式读取文本数据时,它将内部存储为Unicode。如果你关心二进制值(即原始字节),那么首先不要解码它。
如果您真的需要使用自定义EBCDIC编码做任何事情,可以使用我的open source EBCDIC implementation - 但我认为您真的只需要决定是将其视为二进制数据还是文本。
答案 2 :(得分:3)
小心读取AFP数据。它是字节和位顺序的大端。如果您将其视为二进制数据,则需要考虑到这一点,例如通过文档中的结构化字段进行解析。