이 기사에서는 모든 문제를 설명하기 위해 'Ha'를 예로 사용했습니다. 'Ha'의 다양한 인코딩은 다음과 같습니다.
1. UNICODE(UTF8-16),
2; . UTF-8, E59388
3. GBK,B9FE.
1. Python의 str 및 유니코드
Python의 중국어 인코딩은 항상 매우 큰 문제였으며, Python에서 str과 유니코드는 정확히 무엇입니까?
파이썬에서 유니코드라고 하면 일반적으로 유니코드 객체를 가리킵니다. 예를 들어 'haha'의 유니코드 객체는
u'u54c8u54c8'
그리고 str은 이를 나타내는 바이트 배열입니다. 유니코드 객체(utf-8, gbk, cp936, GB2312)를 인코딩한 후의 저장 형식입니다. 여기서는 다른 의미가 없는 단순한 바이트 스트림입니다. 이 바이트 스트림으로 표시되는 콘텐츠를 의미있게 만들려면 올바른 인코딩 형식을 사용하고 디코딩하고 표시해야 합니다.
예:
유니코드 객체는 utf-8로 인코딩된 str-s_utf8로 인코딩됩니다. s_utf8은 'xe5x93x88xe5x93x88'을 저장하는 바이트 배열입니다. 그냥 바이트 배열이군요. ㅎㅎ print문을 통해 출력하고 싶으시다면 실망하실텐데요. 왜일까요?
print 문의 구현은 출력 내용을 운영 체제로 전송하기 때문에 운영 체제는 시스템의 인코딩에 따라 입력 바이트 스트림을 인코딩합니다. 이는 UTF-8 형식의 문자열이 "Haha"인 이유를 설명합니다. , 'xe5x93x88xe5x93x88'이 GB2312에 의해 해석되어 "鍝鍚搱"로 표시되므로 출력은 "鍝獚搐"입니다. str은 특정 인코딩 저장 형식인 바이트 배열을 기록한다는 점을 다시 강조하겠습니다. 파일로 출력하거나 인쇄하는 형식은 전적으로 디코딩 인코딩에 따라 어떻게 디코딩되는지에 따라 달라집니다.
str 및 unicode 객체의 변환은 encode 및 decode를 통해 이루어집니다. 구체적인 사용법은 다음과 같습니다.
Convert GBK '하하'를 유니코드로 변환한 다음 UTF8로3. 기본 인코딩 설정
import sys
reload( sys)
sys.setdefaultencoding('gbk')
그러면 변환이 성공할 수 있습니다. 이유는 무엇입니까? Python에서 str 및 unicode의 인코딩 및 디코딩 과정에서 str을 다른 인코딩으로 직접 인코딩하면 str이 먼저 unicode로 디코딩되며 사용되는 인코딩은 일반적으로 기본 인코딩이 ancii이므로 에서는 위의 예에서는 코드의 첫 번째 변환 중에 오류가 발생합니다. 현재 기본 인코딩을 'gbk'로 설정한 후에는 오류가 발생하지 않습니다.
reload(sys)의 경우 Python2.5에서는 초기화 후 sys.setdefaultencoding 메서드를 삭제하므로 다시 로드해야 합니다.
4. 다양한 인코딩 형식으로 파일 조작
파일 형식은 ANSI이고 내용은
abc Chinese
파이썬을 사용하여 읽기
#coding=gbk
print open("Test.txt").read()
결과: abc 중국어
파일 형식을 UTF-8로 변경:
결과: abc涓枃
분명히 여기서 디코딩이 필요합니다:
#coding=gbk
코덱 가져오기
print open("Test.txt").read().decode("utf-8")
결과: abc 중국어
위 test.txt를 에디트플러스로 편집했는데, 윈도우 내장 메모장으로 편집하고 UTF-8 형식으로 저장했더니
실행시 오류가 보고되었습니다:
Traceback( 가장 최근 호출 마지막):
파일 "ChinaTest.py", 3행,
print open("Test.txt").read().decode("utf-8" )
UnicodeEncodeError: 'gbk' 코덱은 위치 0의 문자 u'ufeff'를 인코딩할 수 없습니다: 잘못된 멀티바이트 시퀀스
메모장과 같은 일부 소프트웨어가 UTF-로 인코딩된 파일을 저장하는 것으로 나타났습니다. 도 8에서는 보이지 않는 문자 3개(0xEF 0xBB 0xBF, BOM)가 파일 시작 부분에 삽입됩니다.
따라서 읽을 때 이러한 문자를 직접 제거해야 합니다. Python의 코덱 모듈은 다음 상수를 정의합니다.
#coding=gbk
가져오기 코덱
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode("utf-8")
결과: abc 중국어
5. 파일의 인코딩 형식과 인코딩 문의 역할
소스 파일 인코딩 형식은 문자열 선언에 어떤 영향을 미치나요? 이 문제는 오랫동안 나를 괴롭혔고 이제 마침내 몇 가지 단서를 얻었습니다. 파일의 인코딩 형식에 따라 소스 파일에 선언된 문자열의 인코딩 형식이 결정됩니다. 예:
str = ' ㅎㅎ'
print repr(str)
a. 파일 형식이 utf-8이면 str 값은 'xe5x93x88xe5x93x88'(하하의 utf-8 인코딩)
b. 파일 형식이 gbk이면 str 값은 'xb9xfexb9xfe'(하하 gbk 인코딩)입니다.
첫 번째 섹션에서 언급했듯이 Python의 문자열은 단지 바이트 배열이므로 a 경우 b의 str이 gbk로 인코딩된 콘솔에 출력되면 왜곡된 문자로 표시됩니다: 鍝矚搱; 그리고 b의 경우 str이 utf-8로 인코딩된 콘솔에 출력되면 왜곡된 문자가 표시됩니다. 문제가 무엇인가요? 아니요, 어쩌면 'xb9xfexb9xfe'가 utf-8을 사용하여 디코딩되어 표시되므로 비어 있을 수 있습니다. >_
파일 형식에 대해 이야기한 후 인코딩 문의 역할에 대해 이야기해 보겠습니다. 각 파일의 상단에는 #coding=gbk와 같은 문을 사용하여 인코딩을 선언하지만, 이 말은 무슨 소용이 있나요? 지금까지는 세 가지 기능이 있다고 생각합니다.
은 비ASCII 인코딩이 소스 파일에 나타날 것이라고 선언합니다. 일반적으로 고급에서는
IDE에서, IDE는 사용자가 지정한 인코딩 형식으로 파일 형식을 저장합니다.
소스 코드에서 u'ha'와 같은 선언에 대해 'ha'를 유니코드로 디코딩하는 데 사용되는 인코딩 형식을 결정하는 것도 혼란스러운 부분입니다.
#coding:gbk
ss = u'haha'
print repr(ss)
print 'ss:% s' % ss
이 코드를 utf-8 텍스트로 저장하고 실행해 보세요. 어떤 결과가 나올 것 같나요? 모든 사람의 첫인상은 다음과 같습니다.
u'u54c8u54c8'
ss: 하하
하지만 실제 출력은 다음과 같습니다.
u'u935du581du6431 '
ss:鍝埚搱
이때 인코딩문이 문제를 일으키네요. 다음 단계:
1) 'haha' 인코딩을 가져옵니다: 파일 인코딩 형식에 따라 결정됩니다. 'xe5x93x88xe5x93x88'(haha의 utf-8 인코딩 형식)
2) 유니코드 인코딩으로 변환할 때, 이 변환 과정에서 'xe5x93x88xe5x93x88'의 디코딩은 utf-8로 디코딩되지 않고 GBK에 따라 Decode 'xe5x93x88xe5x93x88' 선언에 지정된 GBK 인코딩으로 결과는 "鍝"입니다.獟搐" 에서 이 세 문자의 유니코드 인코딩은 u'u935du581du6431'입니다. 이는 print repr(ss)가 u'u935du581du6431'을 출력하는 이유를 설명할 수 있습니다.
알겠습니다. 약간 혼란스럽습니다. 다음 예를 분석해 보겠습니다.
#-*-coding:utf-8 -*-
ss = u'haha'
print repr(ss)
print 'ss:%s' % ss
이번 예제를 GBK 인코딩으로 저장하면 결과는 다음과 같습니다.
UnicodeDecodeError: 'utf8' 코덱은 위치 0의 바이트 0xb9를 디코딩할 수 없습니다: 예기치 않은 코드 바이트
여기에 왜 utf8 디코딩 오류가 있습니까? 앞의 예를 생각해보면 변환의 첫 번째 단계에서는 파일 인코딩이 GBK이므로 얻어지는 인코딩은 '하하'이며, 두 번째 단계를 수행하면 변환할 때 GBK 인코딩이 'xb9xfexb9xfe'입니다. 유니코드의 경우 'xb9xfexb9xfe'를 디코딩하면 UTF8이 사용되는데, utf-8 인코딩 테이블을 확인해보면 utf8 인코딩 테이블에는 전혀 존재하지 않는 것을 알 수 있습니다(UTF-8에 대한 설명은 참고) 문자 인코딩 참고 사항: ASCII, UTF-8, UNICODE)에 적용되므로 위 오류가 보고됩니다.
파이썬 중국어 왜곡 문제에 대한 더 심층적인 분석과 관련 글은 PHP 중국어 홈페이지를 주목해주세요!

이 튜토리얼은 Python을 사용하여 Zipf의 법칙의 통계 개념을 처리하는 방법을 보여주고 법을 처리 할 때 Python의 읽기 및 대형 텍스트 파일을 정렬하는 효율성을 보여줍니다. ZIPF 분포라는 용어가 무엇을 의미하는지 궁금 할 것입니다. 이 용어를 이해하려면 먼저 Zipf의 법칙을 정의해야합니다. 걱정하지 마세요. 지침을 단순화하려고 노력할 것입니다. Zipf의 법칙 Zipf의 법칙은 단순히 : 큰 자연어 코퍼스에서 가장 자주 발생하는 단어는 두 번째 빈번한 단어, 세 번째 빈번한 단어보다 세 번, 네 번째 빈번한 단어 등 4 배나 자주 발생합니다. 예를 살펴 보겠습니다. 미국 영어로 브라운 코퍼스를 보면 가장 빈번한 단어는 "TH입니다.

이 기사에서는 HTML을 구문 분석하기 위해 파이썬 라이브러리 인 아름다운 수프를 사용하는 방법을 설명합니다. 데이터 추출, 다양한 HTML 구조 및 오류 처리 및 대안 (SEL과 같은 Find (), find_all (), select () 및 get_text ()와 같은 일반적인 방법을 자세히 설명합니다.

시끄러운 이미지를 다루는 것은 특히 휴대폰 또는 저해상도 카메라 사진에서 일반적인 문제입니다. 이 튜토리얼은 OpenCV를 사용 하여이 문제를 해결하기 위해 Python의 이미지 필터링 기술을 탐구합니다. 이미지 필터링 : 강력한 도구 이미지 필터

데이터 과학 및 처리가 가장 좋아하는 Python은 고성능 컴퓨팅을위한 풍부한 생태계를 제공합니다. 그러나 Python의 병렬 프로그래밍은 독특한 과제를 제시합니다. 이 튜토리얼은 이러한 과제를 탐구하며 전 세계 해석에 중점을 둡니다.

이 기사는 딥 러닝을 위해 텐서 플로와 Pytorch를 비교합니다. 데이터 준비, 모델 구축, 교육, 평가 및 배포와 관련된 단계에 대해 자세히 설명합니다. 프레임 워크, 특히 계산 포도와 관련하여 주요 차이점

이 튜토리얼은 Python 3에서 사용자 정의 파이프 라인 데이터 구조를 작성하여 클래스 및 작업자 과부하를 활용하여 향상된 기능을 보여줍니다. 파이프 라인의 유연성은 일련의 기능을 데이터 세트, GE에 적용하는 능력에 있습니다.

파이썬 객체의 직렬화 및 사막화는 사소한 프로그램의 주요 측면입니다. 무언가를 Python 파일에 저장하면 구성 파일을 읽거나 HTTP 요청에 응답하는 경우 객체 직렬화 및 사태화를 수행합니다. 어떤 의미에서, 직렬화와 사제화는 세계에서 가장 지루한 것들입니다. 이 모든 형식과 프로토콜에 대해 누가 걱정합니까? 일부 파이썬 객체를 지속하거나 스트리밍하여 나중에 완전히 검색하려고합니다. 이것은 세상을 개념적 차원에서 볼 수있는 좋은 방법입니다. 그러나 실제 수준에서 선택한 직렬화 체계, 형식 또는 프로토콜은 속도, 보안, 유지 보수 상태 및 프로그램의 기타 측면을 결정할 수 있습니다.

Python의 통계 모듈은 강력한 데이터 통계 분석 기능을 제공하여 생물 통계 및 비즈니스 분석과 같은 데이터의 전반적인 특성을 빠르게 이해할 수 있도록 도와줍니다. 데이터 포인트를 하나씩 보는 대신 평균 또는 분산과 같은 통계를보고 무시할 수있는 원래 데이터에서 트렌드와 기능을 발견하고 대형 데이터 세트를보다 쉽고 효과적으로 비교하십시오. 이 튜토리얼은 평균을 계산하고 데이터 세트의 분산 정도를 측정하는 방법을 설명합니다. 달리 명시되지 않는 한,이 모듈의 모든 함수는 단순히 평균을 합산하는 대신 평균 () 함수의 계산을 지원합니다. 부동 소수점 번호도 사용할 수 있습니다. 무작위로 가져옵니다 수입 통계 Fracti에서


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

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

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