2009-09-16 2 views
10

많은 언어가 바이너리가 아닌 "plaintext"만 처리하는 기능을 가지고 있습니다. 이것은 ASCII 범위 내의 문자 만 허용된다는 것을 의미합니까?일반 텍스트와 이진 데이터의 차이점은 무엇입니까?

바이너리는 일련의 바이트입니다. 문자로 해석되는 일련의 바이트 인 plaintext와 유사하지 않습니까? 그래서 plaintext는 바이너리와 동일한 데이터 포맷/프로토콜을 저장할 수 있습니까?

+4

참고로 평문과 같은 것은 없습니다. http://www.joelonsoftware.com/articles/Unicode.html – harpo

+0

FYI,이 컨텍스트의 일반 텍스트는 UTF-8이 아니며 유니 코드를 나타낼 수 없습니다. 왜냐하면 앞에서 말했듯이, 그것은 일련의 바이트이고 아무 것도 좋아하지 않기 때문입니다. –

+0

나는 약간 잠망하고 있었다고 생각한다. 결국, 당신은 "평문 (plaintext)"에 관한 공중 따옴표를 포함 시켰습니다. – harpo

답변

3

하나에 더 이상 생각할 수 없다 있습니다 종종 의미하는 것은 언어가 논리적 인 줄 종결 자로 값 10 또는 13과 같은 certian 제어 문자를 자유롭게 해석 할 수 있다는 것입니다. 바꾸어 말하면, 출력 오퍼레이션은 자동적으로 이러한 문자들을 끝에 자동적으로 추가 할 수 있고, 입력 오퍼레이션은 입력으로부터 그것들을 제거 할 수있다 (및/또는 거기에서 읽기를 종료 할 수도있다).

대조적으로 "바이너리"데이터에 대해 작업하는 언어 입출력 작업에는 다른 방법 (파일 끝을 읽지 못함)이 없기 때문에 일반적으로 작업 할 데이터 길이에 대한 입력 매개 변수가 포함됩니다. 그것이 언제 끝났는지 알기.

+0

나는 plaintext를 제공하는 함수가 문자열로 간주한다고 가정합니다. 제어 문자를 사용하는 대신 전송 전 길이를 측정 할 수 있습니까? –

+2

언어에 따라 다릅니다. Ada에서는 certianly입니다. C 언어에서는 줄 끝 기호 (ASCII 0)를 찾는 것이 유일한 방법입니다. 즉, "ASCII"I/O 루틴을 사용하여 파일에 해당 값을 출력 할 수 없지만 길이 기반 "2 진"루틴을 사용할 수 있음을 의미합니다. –

+0

물론 제어 문자 (예 : \ r \ n)를 추가하거나 문자 세트 변환을 해당 문자열에 적용 할 수도 있습니다. 데이터를 이진수로 처리하면 아무 것도 추가되거나 변경되지 않습니다. – nos

6

평이한 텍스트는 사람이 읽을 수 있고, 인쇄 가능한 문자와 인쇄 할 수없는 문자로 구성되어 있기 때문에 보통 사람이 읽을 수 없습니다.

텍스트 편집기 (예 : 메모장 또는 vim)로 jpeg 파일을 열어 보려면 무슨 뜻인지 이해해야합니다.

일반적으로 이진 파일은 구문 분석이 필요하지 않으므로 속도를 최적화하는 방식으로 구성됩니다. 일반 텍스트 파일은 손으로 편집 할 수 있으며 이진 파일은 편집 할 수 없습니다.

+10

Jon Skeet은 바이너리 파일을 읽을 수 있습니다. –

+0

이것이 Chuck Norris 스타일의 Jon Skeet 농담의 새벽이되기를 바랍니다. – JMP

+0

Chuck Norris는 바이너리 파일을 플래터에서 바로 읽을 수 있습니다. – fbrereto

4

"일반 텍스트"는 여러 가지 의미를 가질 수 있습니다.

이 컨텍스트에서 가장 유용한 점은 특정 컴퓨터 시스템이 "텍스트"문자로 간주하는 것의 유한 집합으로 변환 할 수있는 바이트 시퀀스로 구성된 이진 파일에 불과하다는 것입니다.

다소 의미가있는 두 번째 의미는 시스템이 이러한 "텍스트 문자"를 사람이 인식 할 수있는 알파벳의 구성원으로 읽을 수있는 기호로 표시해야한다는 제한 사항입니다. 종종 씌여지지 않은 의미는 번역 메커니즘이 ASCII라는 것입니다.

세 번째로 더욱 제한적인 의미는이 시스템이 "간단한"텍스트 편집기/뷰어 여야한다는 것입니다. 일반적으로 ASCII 인코딩을 암시합니다. 하지만, 실제로, 여러분, 인간, 약간의 펑키 형식으로 인코딩 된 텍스트 읽기, 독점 프로그램에 의해 표시된 텍스트 읽기, ASCII 텍스트 인코딩 된 파일을 읽는 VI 텍스트 편집기와의 차이는 거의 없습니다.

프로그래밍 컨텍스트에서 프로그래밍 환경 (OS + 시스템 API 및 사용자 언어 기능으로 구별 됨)은 "텍스트"문자 집합과이 "텍스트"문자 집합으로 변환 할 수있는 인코딩 집합을 모두 정의합니다. 텍스트 "문자. 이것은 ASCII, 영어 또는 8 비트를 반드시 의미하지는 않습니다. 예를 들어, Perl은 기본적으로 "문자"의 전체 유니 코드 집합을 읽고 사용할 수 있습니다.

특정 질문에 대답하려면 "문자"문자열을 사용하여 임의의 바이트 시퀀스를 전송하고 문자열 종료 규칙을 적용해야한다는 경고가 있어야합니다. 문제는 "문자 데이터 처리"를 위해 이미 존재하는 기능은 이진 데이터를 처리하는 데 유용한 기능이 없을 것입니다.

3

일반적으로 언어/환경/기능에 따라 다릅니다.

이진 데이터는 항상 : 바이너리입니다. 수정없이 전송됩니다.

"일반 텍스트"모드는 다음 중 하나 이상을 의미 할 수 있습니다

  • 바이트의 스트림 라인으로 분할됩니다. 줄 구분 기호는 \ r, \ n 또는 \ r \ n 또는 \ n \ r입니다. 때로는 OS 의존적입니다 (예 : * nix는 \ n을 좋아하고 windows는 \ r \ n을 선호합니다). 읽는 응용 프로그램의 줄 끝은 조정될 수 있습니다.
  • 문자 인코딩을 조정할 수 있습니다.환경 감지 및/또는 응용 프로그램이 아마 다른 변환이 목록에 추가되어야
  • 를 기대 인코딩으로 소스 인코딩을 변환,하지만 난이 순간
2

기술적으로 아무 것도 없습니다. 일반 텍스트는 이진 데이터의 한 형태입니다. 그러나 중요한 차이점은 값이 저장되는 방법입니다. 정수를 저장하는 방법을 생각해보십시오. 이진 데이터에서는 2의 보수 형식을 사용하는데 아마도 32 비트의 공간을 차지합니다. 텍스트 형식에서 숫자는 대신 일련의 유니 코드 숫자로 저장됩니다. 따라서 숫자 50은 바이너리로 0x32 (32 비트를 차지하도록 패딩 됨)로 저장되지만 일반 텍스트에는 '5' '0'으로 저장됩니다.

관련 문제