내 파이썬 웹 앱이 모든 문자열에 유니 코드를 사용해야합니까?
-
05-07-2019 - |
문제
나는 Django와 같은 일부 프레임 워크가 유니 코드를 전부에서 사용하는 것을 보았으므로 좋은 생각이 될 수 있습니다.
다른 한편으로,이 모든 여분의 'U가 어디에나 떠 다니는 것은 큰 고통처럼 보입니다.
내가 이것을하지 않으면 무엇이 문제가 될까요?
내가이 일을하면 제기 될 문제가 있습니까?
나는 지금 내 프레임 워크로 Pylons를 사용하고 있습니다.
해결책
Python 3에서는 모든 문자열이 유니 코드입니다. 따라서 사용하여 준비 할 수 있습니다 u''
필요한 곳에 필요한 문자열, 그리고 결국 Python 3으로 업그레이드 할 때 2to3
모든 도구 u
S는 사라질 것입니다. 그리고 유니 코드 문자열로 코드를 이미 테스트했기 때문에 더 나은 위치에있을 것입니다.
보다 텍스트 대 유니 코드 대신 데이터 8 비트 자세한 내용은.
다른 팁
당신은 피할 수 있습니다 u''
Python 2.6에서 수행함으로써 :
from __future__ import unicode_literals
그것은 만들 것입니다 'string literals'
Python 3에서와 마찬가지로 유니 코드 객체가되는 것;
내가 이것을하지 않으면 무엇이 문제가 될까요?
저는 일본에 사는 서양인이므로 ASCII가 아닌 캐릭터와 함께 일하는 데 필요한 것을 직접 보았습니다. 유니 코드 문자열을 사용하지 않는 경우 문제는 코드가 AZ 이외의 다른 것을 사용하는 세계의 일부에 대한 좌절이된다는 것입니다. 우리 회사는 특정 웹 소프트웨어가 일본 캐릭터를 완전히 엉망으로 만들지 않고 많은 좌절감을 느꼈습니다.
영어 사용자는 유니 코드가 얼마나 훌륭한 지 이해하는 데 약간의 노력이 필요하지만 실제로 모든 문화와 언어에 컴퓨터에 액세스 할 수 있도록하는 것은 정말 훌륭한 노력입니다.
"gotchas":
출력 웹 페이지에 사용중인 인코딩을 올바르게 표시 한 다음 (컨텐츠 인코딩 헤더 사용) 출력시 유니 코드 문자열을 올바르게 인코딩하십시오. Python 3 Unicode Strings는이 작업을 제대로 수행하는 데 큰 개선입니다.
유니 코드 문자열로 모든 것을 수행하고 출력을 수행 할 때 마지막 순간에 특정 인코딩으로 만 변환하십시오. PHP와 같은 다른 언어는 EG UTF-8 형식으로 유니 코드를 조작 할 때 버그가 발생하기 쉽습니다. 유니 코드 문자열을 잘라야한다고 가정 해 봅시다. 내부적으로 UTF-8 형태 인 경우, 다중 바이트 캐릭터를 반쯤 깎아서 쓰레기 생산을 초래할 위험이 있습니다. Python의 유니 코드 문자열 사용은 내부적으로 이러한 실수를하기가 더 어려워집니다.
내부적으로 유니 코드를 사용하는 것은 비 ASCII 문자의 문제를 피하는 좋은 방법입니다. 응용 프로그램의 경계에서 변환 (수신 데이터를 유니 코드로, 나가는 데이터로 UTF-8 등)로 변환하십시오. Pylons는 많은 경우에 귀하를 위해 전환 할 수 있습니다. 예를 들어 컨트롤러는 유니 코드 문자열을 안전하게 반환 할 수 있습니다. sqlalchemy 모델은 유니 코드 열을 선언 할 수 있습니다.
소스 코드의 문자열 리터럴과 관련하여 : U 접두사는 일반적으로 필요하지 않습니다. ASCII를 포함하는 STR 객체를 유니 코드 객체와 안전하게 혼합 할 수 있습니다. 모든 문자열 리터럴이 순수한 ASCII인지 또는 "유니 코드"인지 확인하십시오.