Проблеми с кодирането в Python

В python има 2 обекта, които работят с текст: unicode и str, unicode обектът съхранява знаци във формат unicode (кодиране), str обектът е набор от байтове / знаци, в които python съхранява други кодировки (utf8, cp1251, cp866, koi8-r и т.н.).

Unicode кодирането може да се счита за работещо Python кодиране, тъй като предназначен е да се използва в самия скрипт - за различни операции върху низове.

Външното кодиране (str обект) е предназначено за съхраняване и предаване на текстова информация извън скрипта, например за запис във файл или прехвърляне по мрежата. Затова в тази статия го нарекох външен. Най-използваното кодиране в света е utf8 и броят на приложенията, които преминават към това кодиране, нараства всеки ден, като по този начин се превръща в "стандарт".

Това кодиране е добро, защото заема оптималното количество памет за съхраняване на текст и с него можете да кодирате почти всички езици по света (за разлика от cp1251 и подобни еднобайтови кодировки). Затова се препоръчва да използвате utf8 навсякъде и когато пишете скриптове.

Използване

Скрипт на Python, в самото начало на скрипта указваме кодирането на файла и запазваме файла в него

за да може интерпретаторът на Python да разбере в какво кодиране е файлът

Редове в скрипт

Низовете в скрипта се съхраняват в байтове, от цитат до цитат:

= 6 байта при cp1251

= 12 байта с utf8

Ако добавите символа u преди низа, тогава, когато стартирате скрипта, този низ от байтове ще бъде декодиран в unicode от кодирането, посочено в началото:

и ако кодирането на съдържанието във файла се различава от посоченото, тогава низът може да съдържа "счупени знаци"

Зареждане и запис на файл

Текст в скрипт

Желателно е текстът да се предаде на процедурата за печат в работното кодиране, иликодиране към кодиране на ОС.

Резултатът от скрипта, когато се стартира от конзолата на Windows XP:

a2 = Текст в utf8

b = Текст в unicode

На последния ред отпечатайте конвертирания unicode в cp866 автоматично, вижте следващата точка

Преобразуване на автоматично кодиране

В някои случаи, за да опрости разработката, Python прави преобразуване на кодиране, пример с метода за печат може да се намери в предишния параграф.

В примера по-долу самият python преобразува utf8 в unicode - което води до едно кодиране, за да се свържат низове.

a = Текст в utf8

b = Текст в unicode

c = Текст в utf8 Текст в unicode

Както можем да видим получения низ "c" в unicode. Ако кодировките на низовете бяха еднакви, тогава нямаше да се случи автоматично прекодиране и полученият низ щеше да съдържа кодирането на компонентните низове.

Автоматичното прекодиране обикновено работи, когато има взаимодействие между различни кодировки.

Пример за преобразуване на автоматично кодиране в сравнение

1. utf8 и unicode true

2. utf8 и cp1251 false

script.py:10: UnicodeПредупреждение: Unicode равното сравнение не успя да преобразува и двата аргумента в Unicode - тълкувайки ги като неравни

печат '3. cp1251 и unicode', 'true' if u'Word'.encode('cp1251') == u'Word' else 'false'

3. cp1251 и unicode false

При сравнение 1 кодирането utf8 беше преобразувано в unicode и сравнението беше правилно.

В сравнение 2 се сравняват кодировки от един и същи вид - и двете външни, т.к те са кодирани в различни кодировки, условието издаде, че не са равни.

При сравнение 3 възникна предупреждение поради факта, че се сравняват кодировки от различни типове - работещи и външни, и не се случи автоматично декодиране. стандартно външно кодиране = utf8 и декодиранекодиран низ cp1251 с помощта на метода utf8 python не може.

Извеждане на списък

1 ['\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82', '\xd1\x81\xd0\xbf\xd0\xb8\xd1\x81\xd0\xba\xd0\xb0']

2 ['\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82', '\xd1\x81\xd0\xbf\xd0\xb8\xd1\x81\xd0\xba\xd0\xb0']

Когато се отпечатва списък, се прави извикване [](), което връща вътрешното представяне на този списък - print 1 и 2 са еднакви. За правилното извеждане на списъка, той трябва да бъде преобразуван в низ - отпечатайте 3.

Задаване на външно кодиране при стартиране

При обучението на дете е важно правилно да тълкува света около него. Има много полезни списания, които ще започнат по правилния начин екологичното образование на децата в предучилищна възраст. Развитието на интерес към света около вас е много труден, но интересен процес, обърнете специално внимание на това.