찾다
백엔드 개발파이썬 튜토리얼파이썬 블랙 매직 인코딩 변환 방법

이 글은 python 블랙마법의 인코딩 변환을 주로 소개하고, 파이썬 인코딩 변환 방법을 분석합니다. 관심 있는 친구들은

라이브러리에서 인코딩을 할 때 다른 언어를 사용하고 있음을 참고하세요. 변환 시, 일반적으로 이해할 수 없는 문자를 처리하는 방법은 두 가지(또는 세 가지)뿐입니다:

  • 예외 발생

  • 은 대체 문자

  • 건너뛰기 로 대체됩니다.

그러나 복잡한 현실 세계에서는 다양한 불안정성으로 인해 우리가 처리하는 텍스트에는 혼합 인코딩과 같은 불일치 요소가 항상 존재합니다. 이 경우에는 위의 접근 방식으로 돌아갑니다.

그렇다면 파이썬에 더 좋은 방법이 있을까요?

답은 그렇습니다!

Python의 인코딩 변환 프로세스는 실제로 2단계 변환입니다.


source -> unicode -> dest

먼저 문자열을 원래 인코딩에서 유니코드로 변환합니다. . 그런 다음 유니코드를 대상 인코딩으로 변환합니다.

첫 번째 단계에서는 일반적으로 decode() 또는 unicode()이 두 가지 기능 완료되었습니다. 두 번째 단계에서는
encode() 함수를 사용하여 완료합니다.

여기서 말하는 흑마술은 첫 번째 단계에서 실현됩니다.

decode 및 unicode 함수에는 모두

errors라는 선택적 매개변수가 있습니다. 공식 설명을 살펴보세요:

  • 다른 오류를 설정하기 위해 오류가 제공될 수 있습니다

  • 처리 방식. 기본값은 '엄격'입니다. 즉, 인코딩 오류가 발생합니다.

  • UnicodeDecodeError. 다른 가능한 값은 'ignore' 및 'replace'

  • 입니다.

  • UnicodeDecodeError를 처리할 수 있는
    코덱에 등록된 이름입니다. 🎜>

  • 이 매개변수에는 일반적으로

  • 엄격한 기본값이라는 세 가지 값이 있습니다. 인코딩 오류가 발생하면 UnicodeDecodeError가 발생합니다.

  • 건너뛰기를 무시합니다.

  • 바꾸다 ?

  • 자, 마지막 문장 보셨나요? 쇼가 시작되었습니다!

모듈 코덱에는 Register_error라는 함수가 있습니다. 이 기능을 통해 사용자는 사용자 정의 오류 처리 방법을 등록할 수 있습니다.

UnicodeDecodeError를 처리하는 데 사용됩니다.


함수 프로토타입을 살펴보겠습니다.

codecs.register_error(name, error_handler)

name:

오류 처리기의 이름

. 디코드 기능의 오류 매개변수를 채우는 데 사용됩니다. error_handler: 처리 기능. 이 함수는 예외 매개변수를 허용합니다. 튜플을 반환합니다. 튜플에는 2개의 요소가 있습니다. 첫 번째는 오류가 수정된 문자열이고 두 번째는 디코딩을 계속할 시작 위치입니다. 구체적인 구현을 살펴보겠습니다.

def cjk_error(e):
  if not isinstance(e, UnicodeDecodeError):
    raise TypeError("don't know how to handle %r" % exc) 
  if exc.end + 1 > len(exc.object): 
    raise TypeError('unknown codec ,the object too short!') 
  ch1 = ord(exc.object[exc.start:exc.end]) 
  newpos = exc.end + 1 
  ch2 = ord(exc.object[exc.start + 1:newpos]) 
  sk = exc.object[exc.start:newpos] 
  if 0x81<=ch1<=0xFE and (0x40<=ch2<=0x7E or 0x7E<=ch2<=0xFE): # GBK 
    return (unicode(sk,&#39;cp936&#39;), newpos) 
  if 0x81<=ch1<=0xFE and (0x40<=ch2<=0x7E or 0xA1<=ch2<=0xFE): # BIG5 
    return (unicode(sk,&#39;big5&#39;), newpos) 
  raise TypeError(&#39;unknown codec !&#39;) 
codecs.register_error("cjk_replace", cjk_replace)

위 내용은 제가 인터넷에서

복사
한 것입니다. 처음에는 아주 좋다고 생각했는데, 나중에 보니 매우 반영성이 없는 알고리즘이라는 것을 알게 되었습니다.

예를 들어 utf8과 gbk는 처음 2바이트에 교차점이 있습니다. utf8 문자열을 gbk 인코딩으로 디코딩하면 세 번째 바이트부터 오류가 발생합니다(처음 2바이트는 gbk 인코딩 범위의 한자에 해당할 수도 있음).

예:

a = "你"              # utf8编码:&#39;\xe4\xbd\xa0&#39;
c = unicode(a[:2],&#39;gbk&#39;)  # 正常返回
c = unicode(a, &#39;gbk&#39;)    # UnicodeDecodeError 。错误发生在第三个字节

이러한 상황을 위해 다음과 같이 개선했습니다.


import codec

def cjk_replace(e):
  if not isinstance(e, UnicodeDecodeError):
    raise TypeError("invalid exception type %s" e)

  src = e.encoding
  if src in (&#39;gbk&#39;,&#39;gb18030&#39;, &#39;big5&#39;):
    beg = e.start - 2
    if beg >= 0:
      try:
        return unicode(e.object[beg:e.end], &#39;utf8&#39;), e.end + 1
      except:
        pass

  if exc.end + 1 > len(exc.object):
    raise TypeError(&#39;unknown codec ,the object too short!&#39;)
  ch1 = ord(exc.object[exc.start:exc.end])
  newpos = exc.end + 1
  ch2 = ord(exc.object[exc.start + 1:newpos])
  sk = exc.object[exc.start:newpos]

  if src != &#39;gbk&#39; and 0x81<=ch1<=0xFE and (0x40<=ch2<=0x7E or 0x7E<=ch2<=0xFE): # GBK
    return (unicode(sk,&#39;cp936&#39;), newpos)
  if src != &#39;big5&#39; and 0x81<=ch1<=0xFE and (0x40<=ch2<=0x7E or 0xA1<=ch2<=0xFE): # BIG5
    return (unicode(sk,&#39;big5&#39;), newpos)
  raise TypeError(&#39;unknown codec !&#39;)

codecs.register_error("cjk_replace", cjk_replace)

Of 물론, 이 논리는 실제로 충분히 엄격하지 않습니다. 이러한 혼합 인코딩의 이상을 처리하는 것이 다소 현실적이긴 하지만.

그런데 파이썬이 그런 기능을 제공하기 때문에 모두가 함께 토론할 수 있는데, 어떻게 하면 더 잘할 수 있을까요?

위 내용은 파이썬 블랙 매직 인코딩 변환 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
파이썬 : 기본 응용 프로그램 탐색파이썬 : 기본 응용 프로그램 탐색Apr 10, 2025 am 09:41 AM

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 ​​같은 작업에 적합합니다.

2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?Apr 09, 2025 pm 04:33 PM

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?Apr 02, 2025 am 07:18 AM

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?Apr 02, 2025 am 07:15 AM

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python 3.6에 피클 파일을로드 할 때 '__builtin__'모듈을 찾을 수없는 경우 어떻게해야합니까?Python 3.6에 피클 파일을로드 할 때 '__builtin__'모듈을 찾을 수없는 경우 어떻게해야합니까?Apr 02, 2025 am 07:12 AM

Python 3.6에 피클 파일로드 3.6 환경 보고서 오류 : modulenotfounderror : nomodulename ...

경치 좋은 스팟 코멘트 분석에서 Jieba Word 세분화의 정확성을 향상시키는 방법은 무엇입니까?경치 좋은 스팟 코멘트 분석에서 Jieba Word 세분화의 정확성을 향상시키는 방법은 무엇입니까?Apr 02, 2025 am 07:09 AM

경치 좋은 스팟 댓글 분석에서 Jieba Word 세분화 문제를 해결하는 방법은 무엇입니까? 경치가 좋은 스팟 댓글 및 분석을 수행 할 때 종종 Jieba Word 세분화 도구를 사용하여 텍스트를 처리합니다 ...

정규 표현식을 사용하여 첫 번째 닫힌 태그와 정지와 일치하는 방법은 무엇입니까?정규 표현식을 사용하여 첫 번째 닫힌 태그와 정지와 일치하는 방법은 무엇입니까?Apr 02, 2025 am 07:06 AM

정규 표현식을 사용하여 첫 번째 닫힌 태그와 정지와 일치하는 방법은 무엇입니까? HTML 또는 기타 마크 업 언어를 다룰 때는 정규 표현식이 종종 필요합니다.

Inversiting.com의 크롤링 메커니즘을 우회하는 방법은 무엇입니까?Inversiting.com의 크롤링 메커니즘을 우회하는 방법은 무엇입니까?Apr 02, 2025 am 07:03 AM

Investing.com의 크롤링 전략 이해 많은 사람들이 종종 Investing.com (https://cn.investing.com/news/latest-news)에서 뉴스 데이터를 크롤링하려고합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.