서문 : 시청자가 작동합니까?
뷰어 / 편집기 / 터미널 (utf-8로 인코딩 된 파일과 상호 작용하고 있음)이 파일을 읽을 수 있는지 확인하십시오. 이것은 메모장과 같은 Windows 에서 자주 발생하는 문제입니다 .
텍스트 파일에 유니 코드 텍스트를 작성 하시겠습니까?
Python 2에서는 모듈 open
에서 사용 io
합니다 ( open
Python 3 의 기본 제공 기능과 동일 ).
import io
모범 사례는 일반적 UTF-8
으로 파일에 쓰는 데 사용합니다 (utf-8의 바이트 순서에 대해 걱정할 필요조차 없음).
encoding = 'utf-8'
utf-8은 가장 현대적이고 보편적으로 사용 가능한 인코딩입니다. 모든 웹 브라우저, 대부분의 텍스트 편집기 (문제가있는 경우 설정 참조) 및 대부분의 터미널 / 쉘에서 작동합니다.
Windows에서는 utf-16le
메모장 (또는 다른 제한된 뷰어)에서 출력보기로 제한되어 있으면 시도해 볼 수 있습니다 .
encoding = 'utf-16le' # sorry, Windows users... :(
컨텍스트 관리자로 열고 유니 코드 문자를 작성하십시오.
with io.open(filename, 'w', encoding=encoding) as f:
f.write(unicode_object)
많은 유니 코드 문자를 사용하는 예
다음은 가능한 모든 문자를 최대 3 비트 (4는 최대이지만 조금 멀어 질 것입니다)에서 디지털 표현 (정수)에서 인코딩 된 인쇄 가능 출력 (이름과 함께)과 매핑하는 예제입니다. 가능합니다 (이 파일을 파일에 넣으십시오 uni.py
) :
from __future__ import print_function
import io
from unicodedata import name, category
from curses.ascii import controlnames
from collections import Counter
try: # use these if Python 2
unicode_chr, range = unichr, xrange
except NameError: # Python 3
unicode_chr = chr
exclude_categories = set(('Co', 'Cn'))
counts = Counter()
control_names = dict(enumerate(controlnames))
with io.open('unidata', 'w', encoding='utf-8') as f:
for x in range((2**8)**3):
try:
char = unicode_chr(x)
except ValueError:
continue # can't map to unicode, try next x
cat = category(char)
counts.update((cat,))
if cat in exclude_categories:
continue # get rid of noise & greatly shorten result file
try:
uname = name(char)
except ValueError: # probably control character, don't use actual
uname = control_names.get(x, '')
f.write(u'{0:>6x} {1} {2}\n'.format(x, cat, uname))
else:
f.write(u'{0:>6x} {1} {2} {3}\n'.format(x, cat, char, uname))
# may as well describe the types we logged.
for cat, count in counts.items():
print('{0} chars of category, {1}'.format(count, cat))
이 과정은 약 1 분 정도 걸리며 데이터 파일을 볼 수 있으며 파일 뷰어에서 유니 코드를 표시 할 수 있습니다. 범주에 대한 정보는 여기 에서 찾을 수 있습니다 . 카운트를 기준으로 Cn 및 Co 카테고리를 제외하면 결과가 향상 될 수 있습니다. Cn 및 Co 카테고리는 관련 기호가 없습니다.
$ python uni.py
16 진 맵핑, 카테고리를 표시합니다. , symbol (이름을 얻지 못하면 제어 문자) 및 기호 이름을 표시합니다. 예 :
less
유닉스 또는 Cygwin을 권장 합니다 (전체 파일을 출력에 출력하지 마십시오).
$ less unidata
예를 들어 파이썬 2 (유니 코드 5.2)를 사용하여 샘플링 한 다음 줄과 유사하게 표시됩니다.
0 Cc NUL
20 Zs SPACE
21 Po ! EXCLAMATION MARK
b6 So ¶ PILCROW SIGN
d0 Lu Ð LATIN CAPITAL LETTER ETH
e59 Nd ๙ THAI DIGIT NINE
2887 So ⢇ BRAILLE PATTERN DOTS-1238
bc13 Lo 밓 HANGUL SYLLABLE MIH
ffeb Sm → HALFWIDTH RIGHTWARDS ARROW
Anaconda의 Python 3.5에는 유니 코드 8.0이 있으며 대부분 3을 가정합니다.