ASCII 코드는 7 비트입니까, 8 비트입니까?


100

선생님은 ASCII가 8 비트 문자 코딩 체계라고 말씀하셨습니다. 그러나 0-127 코드에 대해서만 정의되므로 7 비트에 맞을 수 있습니다. 그렇다면 ASCII 비트가 실제로 7 비트 코드라고 주장 할 수 없습니까?

그리고 ASCII가 8 비트 코드라고 말할 때 우리는 무엇을 의미합니까?

답변:


91

ASCII 는 실제로 원래 7 비트 코드로 인식되었습니다. 이것은 8 비트 바이트가 유비쿼터스가되기 훨씬 전에 수행되었으며, 1990 년대까지도 자체 목적을 위해 각 텍스트 바이트의 8 비트를 사용할 수 있다고 가정하는 소프트웨어를 찾을 수있었습니다 ( "8 비트 정리가 아님"). 요즘 사람들 은 이것을 0x80에서 0xFF까지의 바이트가 정의 된 의미가없는 8 비트 코딩으로 생각 하지만 그것은 retcon 입니다.

8 번째 비트를 사용하는 수십 개의 텍스트 인코딩이 있습니다. ASCII 호환 여부와 고정 너비 또는 가변 너비로 분류 할 수 있습니다. ASCII 호환 은 컨텍스트에 관계없이 0x00에서 0x7F까지의 값을 가진 단일 바이트가 ASCII에서와 동일한 문자를 인코딩 함을 의미합니다 . 가능하다면 ASCII와 호환되지 않는 텍스트 인코딩과 관련이있는 것은 원하지 않습니다. ASCII를 예상하는 순진한 프로그램은 비극적이고 종종 보안을 침해하는 방식으로 잘못 해석하는 경향이 있습니다. 요즘에는 너무 많이 사용되지 않아서 (예를 들어) HTML5는 UTF-16을 제외하고는 공개 웹에서 사용을 금지합니다 . 나는 그들에 대해 더 이상 이야기하지 않을 것입니다.

고정 너비 인코딩은 모든 문자가 동일한 바이트 수를 사용하여 인코딩됩니다. ASCII 호환이 되려면 고정 포함 인코딩이 1 바이트 만 사용하여 모든 문자를 인코딩해야하므로 256 자 이하일 수 있습니다. 오늘날 가장 일반적인 인코딩은 다음과 같습니다.ISO 8859-1 의 확장 인 Windows-1252 입니다.

오늘날 알아야 할 가치가있는 가변 너비 ASCII 호환 인코딩은 하나 뿐이지 만 매우 중요합니다. 모든 유니 코드를 ASCII 호환 인코딩으로 압축하는 UTF-8 입니다. 당신이 그것을 관리 할 수 ​​있다면 당신은 정말로 이것을 사용하고 싶습니다.

마지막으로 "ASCII"는 오늘날 원래 표준 (ANSI X3.4-1968)이 아닌 유니 코드에서 실용적인 정의를 역사적으로 ASCII 127 자 레퍼토리에는 수십 가지 변형이 있었기 때문입니다. 구두점은 프랑스어 텍스트 전송을 용이하게하기 위해 악센트 부호가있는 문자로 대체 될 수 있습니다. 오늘날 이러한 모든 변형은 더 이상 사용되지 않으며 사람들이 "ASCII"라고 말하면 값이 0x00에서 0x7F 인 바이트가 유니 코드 코드 포인트 U + 0000에서 U + 007F를 인코딩한다는 것을 의미합니다. 이는 기술 표준을 작성하는 경우에만 중요 할 것입니다.

ASCII의 역사와 그 이전의 인코딩에 관심이 있다면 "문자 코드의 진화, 1874-1968"(samizdat 사본 : http://falsedoor.com/doc/ascii_evolution-of- character-codes.pdf ) 그런 다음 참조를 추적합니다 (그 중 대부분은 온라인에서 사용할 수 없으며 대학 도서관에 액세스해도 찾기 어려울 수 있습니다).


1
그렇다면 ASCII noawadays는 7 비트 또는 8 비트입니까? 당신은 분명히 0x00-0x7F를 사용한다고 말합니다. 그러나 우리는 선행 0을 계산합니까?
Anurag Kalia 2013

8
그것은 당신이 어떤 종류의 pedant인지에 달려 있습니다. 여전히 공식적으로 ASCII를 정의하는 사양 (ANSI X3.4-1968)은이를 7 비트 인코딩으로 설명하지만 아무도 더 이상 7 비트 바이트를 전송하지 않으며 오늘날 상호 운용성에 따라 8 번째 비트가 0이어야합니다. 패리티 비트 또는 이와 유사한 용도로 사용하십시오. 따라서 숫자 공간의 위쪽 절반을 "예약 됨, 사용하지 않음"으로 남겨 두는 8 비트 인코딩으로 ASCII를 설명하는 것도 똑같이 유효한 IMNSHO입니다. 어느 쪽이든 상위 비트가 설정된 8 비트 바이트를 전송하면 유효한 ASCII를 전송 하지 않습니다 .
zwol

1
(...하지만 UTF-8, ISO 8859-1 또는 KOI8-R과 같이 유효한 다른 것을 전송할 수 있습니다.)
zwol

1
정말 현명하게 말하면 표준은 이제 INCITS 4-1986 [R2012]입니다. 이전에 X3로 알려진 ASC 가 NCITS 이후 INCITS로 변형 되었기 때문 입니다. 그러나 프랑스어, 독일어, 스페인어 등에 대한 약 12 ​​개의 악센트 문자가있는 7 비트 변형은 ANSI / INCITS가 아니라 ISO / IEC 646 및 ECMA-6입니다. 그리고 유니 코드의 첫 번째 256 자 블록을 형성하는 것은 8 비트 (ISO / IEC) 8859-1입니다.
dave_thompson_085 dec.

2
@ dave_thompson_085 모든 사람이 당신만큼 현학적 인 것은 아닙니다. 즉, "ASCII"또는 "X3.4-1968"을 참조하는 오래된 기술 문서와 표준을 찾을 수 있으며 , 국가 변형 을 포함 하거나 최소한 명확하게 배제하지 않고 논쟁으로 이어집니다. 그러므로 나는 개인적으로 그것이 중요한 스펙을 작성해야한다면 ASCII에 대한 표준 참조로 유니 코드를 사용할 것입니다. 그게 내가 의미 한 전부입니다.
zwol 2015

14

Linux man ascii에서는 다음과 같이 말합니다.

ASCII는 정보 교환을위한 미국 표준 코드입니다. 7 비트 코드입니다.


9

원래 ASCII 테이블은 7 비트로 인코딩 되므로 128 자입니다.

오늘날 대부분의 독자 / 편집기 는 8 비트로 인코딩되고 256 자 ( Á , Ä , Œ , é , è 및 유럽 언어에 유용한 기타 문자 포함 )를 사용하는 "확장 된"ASCII 테이블 ( ISO 8859-1 ) 을 사용합니다. 수학적 글리프 및 기타 기호).

기본 ASCII 테이블과 UTF-8을 사용하는 것과 동일한 인코딩 (의미가 있지만 0x41입니다 모두 코드에), 그것은 "라틴 확장-A"블록에 대한 동일한 인코딩을 공유하지 않습니다. 단품 또는 피냐타 와 같은 단어에 이상한 문자가 나타나는 경우가 있습니다.


위의 몇 가지 실수가 있습니다. Œ은 CP-1252 에 있지만 ISO 8859-1의 일부가 아닙니다 . 그리고 Latin Extended-A 블록은 유니 코드의 처음 128 자 또는 256자가 아닙니다. ğ, ł 및 ſ와 같은 문자가 포함 된 다음 블록입니다.
Richard Smith

좋은 지적! "Latin-1 Supplement"를 의미 한 것 같아요. 표준 표준 ...
Guillaume

1
많은 "확장 ASCII"문자 세트가 있으며 그중 하나만 ISO 8859-1입니다. 텍스트를 인코딩하고 디코딩 할 때 어떤 특정 문자 인코딩이 사용되는지 알아야하기 때문에이 용어는 거의 의미가 없습니다 (확장 ASCII 문자 집합 용이 아닐 수도 있음).
Tom Blodget

2

ASCII 인코딩은 7 비트이지만 실제로 ASCII로 인코딩 된 문자는 7 비트 그룹에 저장되지 않습니다. 대신 하나의 ASCII가 바이트에 저장되며 MSB는 일반적으로 0으로 설정됩니다 (예, ASCII로 낭비 됨).

텍스트 편집기에서 ASCII 문자 집합에 문자열을 입력하고 인코딩을 ASCII로 설정하고 2 진 / 16 진을 확인하여이를 확인할 수 있습니다.
여기에 이미지 설명 입력

곁에 : (엄격하게) ASCII 인코딩의 사용은 이제 흔하지 않습니다. UTF-8을 선호합니다 ( 위에서 언급 한 MSB를 낭비 하지 않습니다 . 실제로 MSB가 1이면 코드 포인트가 1 바이트 이상으로 인코딩됨을 나타냅니다).


0

원래 ASCII 코드는 0에서 127까지 번호가 매겨진 128 개의 다른 문자를 제공했습니다. ASCII a 7 비트는 동의어입니다. 8 비트 바이트가 공통 저장 요소이기 때문에 ASCII는 외국어 및 기타 기호에 사용되는 128 개의 추가 문자를위한 공간을 남깁니다. 그러나 7 비트 코드는 8 비트 코드 이전에 만들어졌습니다. 정보 교환을위한 미국 표준 코드 (American Standard Code for Information Interchange)의 ASCII 약자 초기 인터넷 메일 시스템에서는 7 비트 ASCII 코드 만 지원했습니다. 이는 Suck 시스템을 통해 프로그램과 멀티미디어 파일을 실행할 수 있기 때문입니다. 이러한 시스템은 8 비트 바이트를 사용하지만 MIME, UUcoding 및 BinHex와 같은 코딩 방법을 사용하여 7 비트 형식으로 변환되어야합니다. 이는 8 비트가 7 비트 문자로 변환되어 인코딩을 위해 추가 바이트가 추가되었음을 의미합니다.


-3

ASCII를 7 비트 코드로 호출 할 때 가장 왼쪽 비트가 부호 비트로 사용되므로 7 비트로 최대 127까지 쓸 수 있습니다. 이는 ASCII의 최대 imam 값이 0에서 255까지이기 때문에 -126에서 127까지를 의미합니다. 마지막 비트가 부호 비트로 간주되는 경우 7 비트의 인수로만 만족됩니다.


캐릭터는 어떻게 사인을 가질 수 있습니까?
Oleh Misarosh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.