Python 문자 인코딩과 바이너리에 대해 어쩔 수 없이 해야 할 말

2진
핵심 사상:
포노이만+투영기
전기는 어떻게 상태를 표시해야만 안정될 수 있습니까?
컴퓨터가 설계를 시작할 때 간단함을 고려하는 것이 아니라 자동으로 임무와 결과를 완성할 수 있는 신뢰성을 고려한다.
단순성은 언제나 안정적이고 신뢰할 수 있는 기초 위에서 이루어진다
10진법을 시도했지만 전류의 상태 차이를 검사하기 어렵고 안정적인 상태를 검사하기 어려웠다. 가장 안정적인 검사는
통전과 불통 상태는 모두 두 가지 상태이다. 그러면 통전은 1불통 전기를 0, 1과 0으로 규정하는 상태 논리이다
비트비트
그러면 어떻게 0과 1로 숫자와 문자를 표시합니까?
먼저 표시해야 할 문자를 찾아내면 영문 문자와 숫자 문자가 100여 개에 불과하고 7개의 바이너리가 필요하다
모두 표현할 수 있지만 확장성을 위해 한 자리 이상의 확장을 나타냅니다. 이것이 바로 ASCII 코드입니다.
한 문자는 최대 8개의 바이트만 표시하기 때문에 8바이트를 저장 단위로 규정하고 모든
    8 Bit = 1 Byte
문자는 숫자로 표시하고, 숫자는 2진법으로 표시하며, 즉 문자-->숫자-->2진법으로 규정한다.
그러면 텍스트 정보는 컴퓨터를 통해 2진법으로 저장되고, 컴퓨터에 저장된 2진수는 역전될 수 있다
텍스트 정보
10진법에서 2진법 사이의 관계 변환은 고정적이다. 그러면 문자에서 숫자 사이의 변환은 우리가 일컫는다
문자 인코딩, ASCII 코드 Unicode UTF-8은 문자와 숫자 간의 매핑 관계를 저장합니다.
몇 가지 관계를 분명히 하다
  1. 문자와 숫자 간의 관계는 영사 관계이고 인위적으로 규정된 표준이다
이런 반사 관계는 생활 속에 보편적으로 존재한다.
a. 주민등록증 정보와 주민등록번호
b. 데이터베이스 id와 이 줄 정보
c. 주문 정보 및 주문 번호
d. 직원 번호와 직원
e. 사전의 키와 값
f. 메모리 주소와 이 주소에 저장된 값
    ...
  2. 숫자에서 2진법 사이의 관계, 이것은 수학이나 물리의 법칙처럼 고정적인 전환 방식, 죽은
  3. 8진법 16진법은 모두 2진법을 기초로 하고 10진법과 직접적인 관계가 없다. 주로
가독성, 2진법의 두 가지 표현 형식
예를 들어 2진법 00000000의 저장 단위, 8진법 00000000은 3진법마다 회전한다
변위 10진법은 최소수가 0이고 최대가 7이기 때문에 수치 범위가 0-7이라는 것을 나타낸다
16진수 000000 4진수 변환 비트당 10진수는 최소 비트가 0이고 최대 15입니다.
모든 수치 범위는 0-15이며, 10 메커니즘을 초과하여 범위를 표시하기 때문에 abcdef로 10 11을 표시합니다
   12 13 14 15
16진수 메모리 주소 표시 IPv6 주소 색상표 mac 주소 2진수 데이터\x 접두사 b/B
IP 주소(32비트는 10진수로 나뉜다) x.x.x.x는 x마다 8개의 비트가 표시하는 10진수 숫자이다
# 8진법 16진법은 2진법의 기초 위에 세워진 것이다
Py진 변환 함수
10진수를 다른 진수로 바꾸다
2진 bin 접두사 0b 바꾸기
16진수 hex 접두사 0x 돌리기
8진법 oct 접두사 0o 바꾸기
# 2진법 8진법 16진법은 접두사가 달린 문자열 형식인'0b/o/x...'를 통해

# 10  
number = 9999
print("10 ".ljust(40, "*"))
# 10  2 
b_number = bin(number)
print(" :", b_number)
# 10 8 
o_number = oct(number)
print(" :", o_number)
# 10 16 
h_number = hex(number)
print(" :", h_number)
기타 바이너리 10진 int(...,base)base 지정 바이너리

# 10  
number = 9999
print("10 ".ljust(40, "*"))
# 10  2 
b_number = bin(number)
print(" :", b_number)
# 10 8 
o_number = oct(number)
print(" :", o_number)
# 10 16 
h_number = hex(number)
print(" :", h_number)
 
#  10 
# 2 10 
num_b = int(b_number, base=2)
print(num_b)
# 8  10 
num_o = int(o_number, base=8)
print(num_o)
# 8  16 
num_h = int(h_number, base=16)
print(num_h)
문자열 바이너리 문자열
    bytes
    encode
문자 인코딩을 지정해야 합니다. 결과 접두사는 b/B "...

#  
song = " , "
 
byte_song = song.encode(encoding="utf-8")
print(byte_song)
#  
eq_byte_song = bytes(song, encoding="utf-8")
print(eq_byte_song)
print(byte_song == eq_byte_song)
바이너리 문자열
    decode
    str
문자 인코딩 지정 필요

#  
song = " , "
#  
byte_song = song.encode(encoding="utf-8")
print(byte_song)
 
#  
print(" ".rjust(40, "_"))
dec_song = byte_song.decode(encoding="utf-8")
print(dec_song)
#  '
str_song = str(byte_song, encoding="utf-8")
print(str_song)
print(dec_song == str_song)
산수 방법
10진법 2816진법 바꾸기
다른 진법 10진법은 오른쪽에서 왼쪽으로 기수의 지정된 순서를 더하여 합을 구하는 것이다
# 공식 법칙처럼 변환 방식, 고정
2진 표시
기호 없음 및 기호 없음 유형으로 구분되며 일반적으로 8 16 32 64 Bit는 정수 또는 부동 소수점을 나타냅니다.
기호의 가장 높은 위치는 기호를 나타내는데, 바로 가장 왼쪽의 비트 위치이고, 0은 정1을 나타내고, 음수는 정음하표위 0과 1을 나타낸다
기호 위치는 범위를 나타낸다. 왜냐하면 반으로 나누어야 하기 때문이다. 반은 정수를 나타내고 반은 마이너스를 나타내기 때문이다.
간단히 말하면 기호 비트 하나를 제거합니다. - 2* (n-1) - 2* n (n-1) - 1, n = 8/16/32/64
기호 비트 없음은 0에서 2*n-1을 나타냅니다.
# 길이는 1/2/4/8바이트로 구분됩니다.
Py 문자에 대한 ASCII 숫자 함수
  ord()
문자 인코딩
언어 문자 ----> 숫자 ----> 0 1 바이너리
# 이 맵 관계표는 문자 인코딩이라고 합니다.
# 문자 인코딩으로 해결되는 문제는 문자와 십진수 사이의 매핑 관계입니다.
중국gb2312->GBK 중국어 2바이트, 영어 1바이트
국제 유니코드(2~4바이트) -> UTF-8(1-4바이트)
    1. 글로벌 언어 문자 지원
    2. 글로벌 문자 인코딩 매핑 포함
# 전 세계 각국 언어는 유니코드, 유니코드는 전 세계 각국 언어로 전환
    3. 전 세계 소프트웨어/하드웨어에서 유니코드 지원
메인스트림 UTF-8
유니코드는 한 문자에 최소 2바이트가 필요하다는 것을 표시하기 때문에 원래 ASCII를 사용하려면 한 바이트만 필요합니다.
현재 유니코드 인코딩을 사용하면 네트워크 전송에 필요한 저장 공간을 두 배로 저장하고 받아들일 수 없다
UTF-8은 이 문제를 해결하기 위해 역사적인 무대에 올랐다. 그래, 네트워크 전송과 저장 사용
UTF-8, 운영 체제가 유니코드를 지원하므로 효율적인 전송, 저장 및 글로벌 언어 시스템 지원 가능
Python 인코딩
우선 파이썬의 인코딩은 도대체 어디에서 신성한 것입니까?
우리는 코드를 저장한 파일과 코드를 메모리에 불러와서 해석기가 처리한 파일을 보았다
우리가 두드린 코드는 사실 본질적으로 텍스트 데이터이다
텍스트 데이터는 어떤 인코딩 테이블을 통해 2진법으로 변환하여 하드디스크에 저장해야 한다
컴퓨터에 저장된 이진 데이터도 인코딩 테이블이 있어야만 텍스트 데이터로 변환할 수 있다
Python의 인코딩은 어떻게 된 것입니까?
Py3의 기본 파일 인코딩은 UTF-8입니다. 편집기를 통해 파일을 편집할 때도 기본 인코딩이 있습니다.
일반적으로 기본값은 UTF-8입니다. 정의된 파일에서 텍스트 데이터가 UTF-8로 인코딩되지 않으면 Py문에서
부품의 첫 줄은 Py 해석기에게 이 파일이 어떤 인코딩을 하는지 알려줍니다.
해석기는 우리가 본 편집기 안의 텍스트 데이터가 아니라 하드디스크에 저장된 01을 읽는다
동일한 바이너리 데이터, 해석기는 기본 UTF-8 인코딩으로 하드디스크에 있는 바이너리 수를 읽으려고 시도한다
파일 데이터로 변환하면 기본utf-8이 아닌 경우 디코딩이 발생하고 해석기가 텍스트 데이터에 대한 해석에 실패합니다.
Py 원본 파일의 시작 부분에 현재 파일의 인코딩 형식을 지정하여 Py 해석기에서 이 파일을 변환하는 방법을 알려야 합니다
Py 해석기 기본 인코딩은 유니코드입니다. 해석기는 읽은 바이너리 데이터를 문자 인코딩으로 변환합니다.
파일 데이터로 바꾼 다음 유니코드 인코딩으로 다시 변환합니다. 운영체제가 유니코드를 지원하면 해석기
모두 정상적으로 실행되고 결과를 출력할 수 있다
해석기
바이너리 데이터 -> 문자 인코딩 테이블 -> 텍스트 데이터 -> 유니코드 인코딩 텍스트 데이터
편집기
바이너리 데이터 -> 문자 인코딩 테이블 -> 인코딩 테이블에 대한 텍스트 데이터
# 해석기와 편집기는 모두 파일의 바이너리 데이터에서 시작하여 인코딩을 통해 대응하는 텍스트로 변환한다
# 데이터, 하지만 해석기는 파일 데이터를 바탕으로 텍스트 데이터를 베이스 머신 명령으로 해석하여 실행한다
Py 원본 파일 인코딩과 Py 해석기 기본 인코딩이 일치하지 않음을 알아야 합니다.
# Py 소스 파일 인코딩 기본 UTF-8, Py 해석기 기본 인코딩 유니코드
그렇다면 혼란스러운 문제 해결의 사고방식이 생기면 잘 해결될 것이다
# 난수 - 문자 인코딩 지정 오류, 저장된 바이너리를 텍스트 파일로 변환하여 선택한 문자 집합 오류
  1. C/S 아키텍처 소프트웨어, Client 및 Server 기본 인코딩 일치 여부 확인
  2. 웹 백엔드, 데이터베이스 기본 인코딩, 테이블 인코딩 및 언어별 연결 데이터베이스 인터페이스 인코딩 일치 여부
  3. 파일, 편집기의 기본 인코딩이 파일의 초기 인코딩과 일치하는지, 인코딩된 대로 인코딩하여 읽는지 확인하기
Python이 소스 파일 문자 인코딩을 선언하는 방법
  1. # conding:utf-8
  2. # -*- conding:utf-8 -*-
#모두 #로 시작하여 소스 파일 맨 위에 쓰기

# -*- coding:utf-8 -*-
# coding: utf-8
총결산
파이썬 문자 인코딩과 바이너리에 대해 어쩔 수 없이 말씀드려야 할 것들에 대한 이 글을 소개합니다. 파이썬 문자 인코딩과 바이너리에 대한 더 많은 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기