Проблеми с кодирането в 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.
Задаване на външно кодиране при стартиране
При обучението на дете е важно правилно да тълкува света около него. Има много полезни списания, които ще започнат по правилния начин екологичното образование на децата в предучилищна възраст. Развитието на интерес към света около вас е много труден, но интересен процес, обърнете специално внимание на това.