문제

일부 Hex 값을 구문 분석하고 찾는 데 필요한 일부 EBCDIC 데이터로 작업하고 있습니다.내가 겪고 있는 문제는 잘못된 인코딩으로 파일을 읽고 있는 것 같다는 것입니다.내 기록이 "로 시작되는 것을 볼 수 있습니다.!"(이것은 x5A EBCDIC) 그러나 16진수로 변환하면 다음과 같이 반환됩니다. 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

감사해요!

도움이 되었습니까?

해결책

예, 문자열로 텍스트 데이터를 읽으면 내부적으로 유니 코드로 저장합니다. 당신이 신경을 걱정한다면 이진 값 (즉, 원시 바이트)은 처음에 해독하지 마십시오.

사용자 정의 ebcdic 인코딩으로 무엇이든해야한다면 내 오픈 소스 EBCDIC 구현 - 그러나 나는 당신이 이것을 이진 데이터 나 텍스트로 취급하는지에 대해 당신의 마음을 구성해야한다고 생각합니다.

다른 팁

당신은 다음과 같이 할 수 있습니다 :

  1. AFP 파일을 엽니 다. 처음 9 바이트를 읽으십시오.
  2. 바이트 0은 0xd3 또는 0x5a 여야합니다. 바이트 1과 바이트 2는 방금 읽은 9 바이트 중 8 개를 포함하여 SFI의 길이입니다. 빅 엔디 언이이므로 길이 = byte1 * 256+byte2입니다.
  3. 바이트 3, 4 및 5는 구조화 된 필드 식별자입니다. 인쇄용 텍스트를 찾고 있다면 PTX (프리젠 테이션 텍스트 요소) 0xd3 0xee 0x9b를 찾으십시오. 앞서 길이 -8을 건너 뛰고 찾지 못하면 다음 9 바이트를 읽으십시오.
  4. PTX를 찾은 경우 길이 -8 바이트를 읽으십시오. 텍스트에 도달하기 위해 제어 시퀀스를 통해 구문 분석하는 것은 약간 까다 롭습니다. 첫 번째는 0x2b 0xd3, 길이에 대한 바이트, 그리고 어떤 종류의 제어 시퀀스에 대한 바이트로 시작합니다. 이 바이트가 홀수 인 경우 다음 컨트롤 시퀀스는 길이 바이트부터 시작하여 0x2b 0xD3 헤더를 생략합니다. 이것을 "체인"이라고 불리며이 물건을 구문 분석하려는 프로그래머를 운전하기 위해 소개되었습니다.
  5. 길이 바이트 길이 -1에서 앞서 건너 뛰고 다음 0x2b 0xD3을 찾거나 찾으십시오. 마지막 제어 시퀀스는 묶지 않으며 PTX의 끝 부분에 따르는 모든 것은 EBCDIC입니다. Jon Skeet의 라이브러리 (감사합니다, Jon)를 사용하고 다음 PTX 요소를 찾으십시오.

미안 해요. 가능하지만 간단하지는 않습니다.

그런 식으로 AFP 데이터를 주의해서 읽으세요.바이트 순서와 비트 순서 모두에서 빅엔디안입니다.문서의 구조화된 필드를 통한 구문 분석과 같이 이를 이진 데이터로 처리하는 경우 이를 고려해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top