사람들이 이진 데이터를 어떻게 표현하는지, 네트워크를 통해 어떻게 전송되는지 혼란 스럽습니다. 나는 위키피디아의 예를 통해 설명 할 것이다. 여기에 표시 < - https://imgur.com/a/POELH -> 그래서 나는 이진 데이터를 기본 64로 인코딩하고 TWFU 텍스트를 보내고 있습니다. 그래서 나는 T, W, F 그리고 마침내 U를 보내고 있습니다. 그러나 T, 숯을 보냅니다. 나는 항상 들었던 것처럼 그것을 보내기 위해 1 바이트가 필요할 것이다. 네트워크를 통해 전송 된 한 문자는 1 바이트입니다.인코딩 된 데이터가 네트워크를 통해 전송되는 방법은 무엇입니까?
이제 24 바이트를 인코딩하면 4 문자 이상을 보낼 것이지만 4 문자를 보내려면 문자만큼 바이트가 필요하다고 생각하게 되었습니까?
위의 예에서 네트워크 "Man" (unencoded) (Requiring 3 bytes normally)
대 "TWFu" (encoded) (requiring 4 bytes normally)
을 보낼 때 동일한 비트 시퀀스가 네트워크를 통해 동일하게 전송됩니다. 마지막으로 데이터를 보내기 위해 소켓을 사용 했으므로 문자열 입력을 요청하고 텍스트 + 인코딩 입력을 요청하지 않습니다.
그래서 네가 4 바이트가 필요한 "TWFu"네트워크를 통해 전송한다고 말하고 있습니다. 일단 네트워크를 통해, 사람이 그것을 해독합니까? 난 그냥 더 많은 문자가 필요한 뭔가를 인코딩 지점을보고 실패했습니다. 예를 들어 네트워크를 통해 "Man"을 전송할 수 있으며 3 바이트가 필요합니다. 그러나 그들은 4 바이트가 필요한 "TWFu"로 인코딩합니다. 이 점을 보지 못했습니다. 네트워크를 통해 전송되면 사람이 그것을 디코딩하고 많은 바이트가 무시됩니다. 'https : // en.wikipedia.org/wiki/Base64' 첫 번째 예제를 여기서 읽어보십시오. –
일반적으로 7 비트 ASCII는 인코딩하지 않지만 레거시 시스템과 호환되어야하는 바이너리 컨텐트는 사용자가 필요합니다. 한 예로, 전자 메일은 첨부 파일에 Base64를 사용하여 전자 메일 자체가 단순한 일반 텍스트이며 쉽게 처리되도록합니다. 디코딩은 수신자의 책임이며 대개 해당 프로토콜 또는 표준에 따라 결정됩니다. 바이트는 "무시"되지 않으며 어디에서이 노출이 발생하는지 잘 모르겠습니다. – tadman
여기서 중요한 점은 많은 텍스트 모드 프로토콜은 일반적으로 ASCII 표준에 따라 7 비트 인코딩이 필요하다는 것입니다. 최신 텍스트 기반 인코딩 (예 : JSON)은 8 비트 인 UTF-8을 사용하지만 UTF-8에서는 멀티 바이트 문자에 대해 가장 높은 비트가 중요한 의미를 지니기 때문에 임의의 이진 데이터를 포함 할 수 없습니다. Base64는 6 비트 인코딩이며 ASCII 표준에서 일반 텍스트 문자의 * 대부분 *을 활용하는 데 꽤 능숙합니다. 0에서 31까지는 줄 바꿈과 같은 특별한 의미를 갖는 "제어 문자"로 예약되어 있다는 것을 기억하십시오. – tadman