인코딩/디코딩의 차이점은?
나는 내가 스트립/유니코드 디코딩과 인코딩의 차이를 이해하는지 확신이 서지 않았다.
알고 있다str().decode()
특정 문자 인코딩이 있는 바이트 문자열이 있는 경우 해당 인코딩 이름을 지정하면 유니코드 문자열이 반환된다.
알고 있다unicode().encode()
유니코드 문자를 주어진 인코딩 이름에 따라 바이트 문자열로 변환한다.
하지만 나는 이해할 수 없다.str().encode()
그리고unicode().decode()
…을 한국적이다. 한 것을 또 수 있을까누가 설명해줄 수 있고, 위에서 내가 잘못한 다른 것도 고칠 수 있을까?
편집:
몇 가지 답변은 무엇에 대한 정보를 제공한다..encode
하지만 아무도 모르는 것 같아.decode
유니코드에 대해 한다.
그decode
유니코드 문자열의 방법은 실제로 응용프로그램을 전혀 가지고 있지 않다(어떤 이유로 유니코드 문자열에 비텍스트 데이터가 없는 경우 - 아래 참조).그것은 주로 역사적 이유로 그곳에 있다고 나는 생각한다.Python 3에서는 완전히 사라졌다.
unicode().decode()
에 대한 암묵적 인코딩을 수행할 것이다.s
기본(ASCII) 코덱 사용.다음과 같이 확인하십시오.
>>> s = u'ö'
>>> s.decode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
>>> s.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
그 오류 메시지는 정확히 같다.
을 위해str().encode()
반대로, 에 대한 암묵적인 해독을 시도한다.s
기본 인코딩 사용:
>>> s = 'ö'
>>> s.decode('utf-8')
u'\xf6'
>>> s.encode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
이렇게 쓰여서.str().encode()
또한 불필요하다.
그러나 후자의 방법에는 또 다른 유용한 적용이 있는데, 문자 집합과 무관한 인코딩이 있어 의미 있는 방법으로 8비트 문자열에 적용할 수 있다.
>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'
하지만 네 말이 맞아. 이 두 응용 프로그램에 대한 "인코딩"의 모호한 사용은...엉망이 된다시, 별개로byte
그리고string
파이톤 3의 타이프들은 더 이상 문제가 되지 않는다.
유니코드 문자열을 바이트 문자열로 나타내는 것을 인코딩이라고 한다.사용하다u'...'.encode(encoding)
.
예:
>>>> u'æø'.encode('utf8')'\xc3\x83\xc2\xa6\xc3\x83\xb8\xc3\x83\xc2\xa5'>>>> u'æø'.encode('11'))'\xc3\xa6\xc3\xb8\xc3\xa5'>>>> u'æø'.encode(' ascy'))UnicodeEncodeError: 'ascII' 코덱은 0-5 위치에 문자를 인코딩할 수 없음:서수가 범위를 벗어남(계속)
예를 들어 유니코드 문자열을 네트워크를 통해 전송하거나 디스크 파일에 저장하는 등, 유니코드 문자열을 IO에 사용해야 할 때마다 일반적으로 인코딩하는 경우.
바이트 문자열을 유니코드 문자열로 변환하는 것을 디코딩이라고 한다.사용하다unicode('...', encoding)
또는 '...'라는 뜻.
예:
>>>> 우에뢰'u'\xc3\xa6\xc3\xb8\xc3\xa5' # 통역사는 유니코드 객체를 그렇게 인쇄한다.>>> 유니코드(unicode)\xc3\xa6\xc3\xb8\xc3\xa5', '11')u'\xc3\xa6\xc3\xb8\xc3\xa5'>>> '\xc3\xa6\xc3\xb8\xc3\xa5'.'('('latin1'))u'\xc3\xa6\xc3\xb8\xc3\xa5'
일반적으로 네트워크 또는 디스크 파일에서 문자열 데이터를 수신할 때마다 바이트 문자열을 디코딩하십시오.
나는 python 3에서 유니코드 취급에 약간의 변화가 있다고 믿으며, 따라서 위의 내용은 아마도 python 3에 맞지 않을 것이다.
몇 가지 좋은 링크:
anUnicode.encode('encode')는 문자열 객체를 생성하며 유니코드 객체에서 호출될 수 있다.
aString.decode('encoding')는 유니코드 객체를 생성하며 주어진 인코딩으로 인코딩된 문자열에서 호출될 수 있다.
몇 가지 추가 설명:
인코딩 세트가 없는 유니코드 객체를 만들 수 있다.파이썬이 기억 속에 저장하는 방법은 네가 상관할 바가 아니다.검색해서 쪼개서 원하는 문자열 조작 기능을 호출하면 된다.
하지만 유니코드 객체를 콘솔이나 텍스트 파일로 인쇄하고자 할 때가 온다.그래서 인코딩을 해야 하는데(예: UTF-8에서는 인코드('utf-8')가 들어가 '\u[someNumber]'가 들어간 문자열이 나오는데, 이 문자열이 인쇄가 완벽하게 가능하다.
그런 다음 다시 - UTF-8로 인코딩된 반대 읽기 문자열을 유니코드로 처리하여 \u360은 5자가 아니라 한 문자가 되도록 하십시오.그런 다음 선택한 인코딩으로 문자열을 디코딩하고 유니코드 유형의 새 객체를 얻으십시오.
사이드 노트처럼 - 'zip', 'base64', 'rot'와 같은 변태 인코딩을 선택할 수 있고, 그 중 일부는 문자열에서 문자열로 변환되지만, 가장 일반적인 경우는 UTF-8/UTF-16과 문자열이 관련된 경우라고 생각한다.
는 mybytestring.encode(somecodec)는 mybytestring.encode(somecodec)의 .somecodec
:
- 베이스64
- bz2
- 즈립
- 육각의
- 쿼프리
- 로트13
- string_properties
- uu
나는 이미 디코딩된 유니코드 텍스트를 디코딩하는 것이 무엇에 좋은지 잘 모르겠다.임의의 인코딩으로 시도하면 항상 먼저 시스템의 기본 인코딩으로 인코딩을 시도하는 것처럼 보인다.
str에서 str 또는 유니코드로 디코딩/엔코딩하는 데 사용할 수 있는 몇 가지 인코딩이 있다.예를 들어 base64, 16진수 또는 심지어 rot13.그것들은 코덱 모듈에 나열되어 있다.
편집:
유니코드 문자열의 디코딩 메시지는 해당 인코드 작업을 실행 취소할 수 있다.
In [1]: u'0a'.decode('hex')
Out[1]: '\n'
돌아온 타입은 유니코드대신 str. 내 생각에 불행하다.하지만 당신이 str과 유니코드 사이에서 적절한 인/디코드를 하지 않을 때 이것은 어쨌든 엉망으로 보인다.
간단한 대답은 그들이 서로 정반대라는 것이다.
컴퓨터는 정보를 저장하고 처리하기 위해 바이트의 가장 기본적인 단위를 사용한다; 그것은 인간의 눈에는 의미가 없다.
예를 들어, '\xe4\xb8\xad\x6\x96\x87'은 두 한자를 나타내는 것이지만, 컴퓨터는 그 한자를 찾는 사전이 주어졌을 때(인쇄나 저장이라는 뜻) 한자로만 알고 있는데, 이 경우, 'utf-8' 사전이며, 만약 들여다본다면 의도된 한자어를 정확하게 보여주지 못할 것이다.다른 사전 또는 잘못된 사전(다른 디코딩 방법 사용)
위의 경우 컴퓨터가 중국어 단어를 찾는 과정은decode()
.
그리고 컴퓨터가 중국어를 컴퓨터 메모리에 쓰는 과정은encode()
.
그래서 인코딩된 정보는 원시 바이트이며, 디코딩된 정보는 참조할 원시 바이트와 사전의 이름이다(그러나 사전 자체는 아니다).
참조URL: https://stackoverflow.com/questions/447107/what-is-the-difference-between-encode-decode
'IT이야기' 카테고리의 다른 글
반응.js: 한 구성 요소를 다른 구성 요소로 포장 (0) | 2022.03.14 |
---|---|
기본 + Redex-perist 반응: 키(블랙리스트)를 무시하는 방법? (0) | 2022.03.14 |
ajax 콜백의 끝에서 .csu(이것)의 목적? (0) | 2022.03.14 |
Vue의 글로벌 구성 요소(nuxt) (0) | 2022.03.14 |
ASP.NET Core 2.0 레이저 대 각도/반사/기타 (0) | 2022.03.14 |