我使用一些EBCDIC数据,我需要解析这些数据并找到一些十六进制值。我遇到的问题是,我似乎正在使用不正确的编码读取文件。我可以看到我的记录以"!“(这是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谢谢!
发布于 2009-04-13 16:59:25
是的,当您将文本数据作为字符串读取时,它会在内部将其存储为Unicode。如果你关心二进制值(即原始字节),那么不要一开始就对它进行解码。
如果你真的需要使用自定义的EBCDIC编码做任何事情,你可以使用我的open source EBCDIC implementation -但我认为你真的只需要决定你是把它当作二进制数据还是文本。
发布于 2009-04-14 14:30:47
你可以这样做:
抱歉,我长篇大论了。这是可行的,但并不简单。
发布于 2009-04-13 20:21:48
以这种方式读取法新社数据时要小心。它在字节和位顺序上都是大端的。如果您将其视为二进制数据,例如解析文档中的结构化字段,则需要考虑到这一点。
https://stackoverflow.com/questions/744486
复制相似问题