π₯ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Π² ΠΏΠΈΡΠΎΠ½Π΅? Π’ΠΎΠΏΠΎΠ²ΡΠ΅ ΡΠΎΠ²Π΅ΡΡ ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ
ΠΠ°ΠΊ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Π² ΠΏΠΈΡΠΎΠ½Π΅?
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Π² ΠΏΠΈΡΠΎΠ½Π΅, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ Π² ΡΠ°ΠΌΠΎΠ΅ Π½Π°ΡΠ°Π»ΠΎ Π²Π°ΡΠ΅Π³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
ΠΡΠ° ΡΡΡΠΎΠΊΠ° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΠΈΡΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ UTF-8 ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΡΠΈΠΌΠ΅Ρ:
# ΠΡΠΈΠΌΠ΅Ρ ΡΠΊΡΠΈΠΏΡΠ° Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ΠΠ°Ρ ΠΊΠΎΠ΄ Π·Π΄Π΅ΡΡ
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Π² ΠΏΠΈΡΠΎΠ½Π΅
ΠΠΎΠ³Π΄Π° Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π½Π° Π°Π»ΡΠ°Π²ΠΈΡΠ°Ρ , ΠΎΡΠ»ΠΈΡΠ½ΡΡ ΠΎΡ Π»Π°ΡΠΈΠ½ΡΠΊΠΎΠ³ΠΎ, Π²Π°ΠΆΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ, ΡΡΠΎΠ±Ρ ΠΏΠΈΡΠΎΠ½ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π» ΡΠΈΠΌΠ²ΠΎΠ»Ρ. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Π² ΠΏΠΈΡΠΎΠ½Π΅ ΠΈ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° Π²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ.
1. ΠΠ°Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ Π² Π½Π°ΡΠ°Π»Π΅ ΡΠ°ΠΉΠ»Π°
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ Π² ΠΏΠΈΡΠΎΠ½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² Π½Π°ΡΠ°Π»Π΅ ΡΠ°ΠΉΠ»Π°. ΠΡΠ° ΡΡΡΠΎΠΊΠ° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ "ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ" ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ:
# -*- coding: ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° -*-
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Π°Ρ ΡΠ΅ΠΊΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ UTF-8 ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
# -*- coding: utf-8 -*-
ΠΡΠ° ΡΡΡΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² Π½Π°ΡΠ°Π»ΠΎ ΡΠ°ΠΉΠ»Π° ΠΏΠ΅ΡΠ΅Π΄ Π»ΡΠ±ΡΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
2. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
ΠΠ½ΠΎΠ³Π΄Π° Π±ΡΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠ°. Π ΠΏΠΈΡΠΎΠ½Π΅ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ sys.setdefaultencoding()
. ΠΠ΄Π½Π°ΠΊΠΎ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΈΡΠΎΠ½Π° 3.x, ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ»Π° ΡΠ΄Π°Π»Π΅Π½Π° ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠΌΠ΅ΡΡΠΎ Π½Π΅Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ codecs
, ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ:
import codecs
# ΠΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Π½Π° UTF-8
codecs.register(lambda name: codecs.lookup('utf-8') if name == 'utf8' else None)
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ-ΠΊΠΎΠ»Π±ΡΠΊ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ ΠΈΠΌΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°Π²Π½ΠΎ "utf8", ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ UTF-8. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅, ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° Π½Π° UTF-8.
3. Π Π°Π±ΠΎΡΠ° Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ Π² ΡΠ°Π·Π½ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°Ρ
ΠΠΎΠ³Π΄Π° Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ Π² ΡΠ°Π·Π½ΡΡ
ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°Ρ
, Π²Π°ΠΆΠ½ΠΎ ΡΠΌΠ΅ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ Π² Π΄ΡΡΠ³ΡΡ. Π ΠΏΠΈΡΠΎΠ½Π΅ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ codecs
ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΡΠΎΠΊ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ° ΠΈΠ· ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ UTF-8 Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Windows-1251:
import codecs
text_utf8 = "ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!"
# ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· UTF-8 Π² Windows-1251
text_windows1251 = text_utf8.encode('utf-8').decode('windows-1251')
print(text_windows1251)
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ encode()
ΠΈ decode()
ΡΡΡΠΎΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ Π² Π΄ΡΡΠ³ΡΡ. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΈΠ· UTF-8 Π² Π±Π°ΠΉΡΠΎΠ²ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ encode('utf-8')
, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ Π΅Π³ΠΎ Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Windows-1251 Ρ ΠΏΠΎΠΌΠΎΡΡΡ decode('windows-1251')
.
4. ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Π² ΠΏΠΈΡΠΎΠ½Π΅ ΠΈ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ. ΠΡ ΡΠ·Π½Π°Π»ΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Π² Π½Π°ΡΠ°Π»Π΅ ΡΠ°ΠΉΠ»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ "ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠΎΠΊΠΈ", Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ codecs
. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ ΠΈΠ·ΡΡΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ codecs
ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΡΠΎΠΊ.
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠ° ΡΡΠ°ΡΡΡ ΠΏΠΎΠΌΠΎΠ³Π»Π° Π²Π°ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ Π² ΠΏΠΈΡΠΎΠ½Π΅. Π£Π΄Π°ΡΠΈ Π² Π²Π°ΡΠ΅ΠΉ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅!