문제

나는 이 구절을 우연히 발견했다. 장고 튜토리얼:

Django 모델에는 기본값이 있습니다 str() 호출하는 메서드 유니코드() 결과를 UTF-8 바이트열로 변환합니다.즉, unicode(p)는 유니코드 문자열을 반환하고 str(p)는 UTF-8로 인코딩된 문자가 포함된 일반 문자열을 반환합니다.

이제 afaik 유니코드는 특별한 표현이 아니기 때문에 혼란스럽습니다. 그러면 Python에서 "유니코드 문자열"이란 무엇입니까?UCS-2를 의미하나요?구글링하니 나오더라구요 이 "파이썬 유니코드 튜토리얼" 대담하게 말하는 것

유니코드는 세계의 모든 공통 쓰기 시스템을 포괄하는 2바이트 인코딩입니다.

그것은 명백히 잘못된 것입니까, 아니면 그렇습니까?나는 문자 집합과 인코딩 문제로 인해 여러 번 혼란스러웠지만 여기서는 내가 읽고 있는 문서가 혼란스럽다고 확신합니다."유니코드 문자열"이 제공될 때 Python에서 무슨 일이 벌어지고 있는지 아는 사람이 있나요?

도움이 되었습니까?

해결책

Python에서 "유니코드 문자열"이란 무엇입니까?UCS-2를 의미하나요?

Python의 유니코드 문자열은 내부적으로 UCS-2(고정 길이 16비트 표현, UTF-16과 거의 동일) 또는 UCS-4/UTF-32(고정 길이 32비트 표현)로 저장됩니다.컴파일 타임 옵션입니다.Windows에서는 항상 UTF-16인 반면, 많은 Linux 배포판에서는 Python 버전에 대해 UTF-32('와이드 모드')를 설정합니다.

일반적으로 다음 사항은 신경 쓰지 않아도 됩니다.유니코드 코드 포인트는 문자열의 단일 요소로 표시되며 2바이트 또는 4바이트로 저장되어 있는지 알 수 없습니다.UTF-16 빌드에 있고 기본 다국어 평면 외부의 문자를 처리해야 한다면 잘못된 일을 하게 될 것입니다. 하지만 그런 경우는 여전히 매우 드물며, 정말로 추가 문자가 필요한 사용자는 와이드 빌드를 컴파일해야 합니다.

명백히 잘못된 것입니까, 아니면 그렇습니까?

네, 완전히 틀렸습니다.공평하게 말하면 그 튜토리얼은 꽤 오래되었다고 생각합니다.유니코드 3.1(기본 다국어 평면 외부에 문자를 도입한 버전)이 아니라면 아마도 넓은 유니코드 문자열보다 이전 날짜일 것입니다.

특히 NT가 내부적으로 사용하는 UTF-16LE 인코딩을 의미하기 위해 "유니코드"라는 용어를 사용하는 Windows의 습관에서 비롯된 추가적인 혼란의 원인이 있습니다.Microsoftland의 사람들은 다소 오해를 불러일으키는 이러한 습관을 종종 따라할 수 있습니다.

다른 팁

한편, 파이썬의 내부 표현이 무엇인지, 그리고 그 한계는 무엇인지 확인하기 위해 세련된 연구를 수행했습니다."파이썬의 유니코드에 관한 진실"는 Python 개발자의 의견을 직접 인용한 아주 좋은 기사입니다.분명히 내부 표현은 컴파일 타임 스위치에 따라 UCS-2 또는 UCS-4입니다.Jon, UTF-16은 아니지만 어쨌든 귀하의 답변으로 인해 올바른 방향으로 나아갈 수 있게 되었습니다. 감사합니다.

Python은 유니코드를 UTF-16으로 저장합니다.str()은 UTF-16 문자열의 UTF-8 표현을 반환합니다.

에서 UTF-8 위키피디아:

UTF-8(8비트 UCS/유니코드 변환 형식)은 유니코드용 가변 길이 문자 인코딩.유니코드 표준의 모든 문자를 나타낼 수 있습니다., 그러나 UTF-8에 대한 바이트 코드 및 문자 할당의 초기 인코딩은 이전 버전인 ASCII와 호환됩니다.이러한 이유로 이메일, 웹 페이지[1] 및 문자가 저장되거나 스트리밍되는 기타 장소에서 꾸준히 선호되는 인코딩이 되고 있습니다.

따라서 유니코드 영역 내에서 표현하려는 문자에 따라 1바이트에서 4바이트 사이입니다.

유니코드 위키피디아에서:

컴퓨팅에서 유니코드는 컴퓨터가 다음 형식으로 표현된 텍스트를 일관되게 표현하고 조작할 수 있도록 하는 산업 표준입니다. 세계의 대부분의 문자 체계.

따라서 이는 전 세계 문자 체계의 대부분(전부는 아님)을 나타낼 수 있습니다.

이게 도움이 되길 바란다 :)

그렇다면 파이썬의 "유니 코드 문자열"은 무엇입니까?

Python은 문자열이 유니코드라는 것을 '알고 있습니다'.따라서 정규식을 수행하면 어떤 것이 문자이고 어떤 것이 아닌지 알 수 있어 정말 도움이 됩니다.strlen을 수행한 경우에도 올바른 결과가 제공됩니다.예를 들어 Hello에서 문자열 개수를 계산했다면 5(유니코드인 경우에도)를 얻게 됩니다.그러나 외국어의 문자열 개수를 계산했는데 해당 문자열이 유니코드 문자열이 아닌 경우에는 훨씬 더 큰 결과를 얻게 됩니다.Pythong은 유니코드 문자열의 각 문자를 식별하기 위해 유니코드 문자 데이터베이스의 정보를 사용합니다.도움이 되길 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top