Добро пожаловать в общедоступный номер: специалист по данным python
【Ключевые моменты, которые нужно увидеть в первую очередь】
1. Понятие кодирования и декодирования символов
2. Процесс перехода от кодировки ASCII к кодировке Unicode
3. Легко спутать кодировку символов и код символов
[Сестра сказала] Последние два эпизода в основном познакомили нас с общим использованием строк, но они также напомнили мне о некоторых понятиях, которые долгое время сбивали с толку: код ASCII, Unicode, кодировка символов и т. д., я никогда не понял это, я мог бы также сегодня Давайте представим содержание этого.
Существует слишком много концепций о кодировке символов, когдаASCII, GB2312, Unicode, UTF-8, UTF-16, кодирование, декодированиеКогда в одной голове нагромождено столько терминов, запутаться действительно легко.
Чтобы прояснить эти вопросы, давайте изменим сегодня манеру говорить,Никакого программирования, только истории, из исторического измерения, чтобы разобраться в непрерывном процессе развития компьютеров в разных языковых странах по оси времени, чтобы полностью понять эти концепции.
Что такое кодирование и декодирование символов?
«Язык», понятный компьютеру, представляет собой двоичное число, наименьший идентификатор информации — двоичный бит, а 8 двоичных битов представляют собой байт; в то время как язык, понятный нам, людям, представляет собой набор английских букв, китайских иероглифов и знаки препинания, символы, арабские цифры и т. д.набор символов. Если компьютер должен работать в соответствии с пожеланиями человека, наборы символов, используемые человеком, должны быть преобразованы во вторичный код, понятный компьютеру.кодирование, его обратный процесс называетсярасшифровка.
Эволюция от ASCII к Unicode
Компьютеры были впервые изобретены и использованы в Соединенных Штатах, требуя кодирования.набор символовОн не очень большой, не более чем английские буквы, цифры и несколько простых знаков препинания, поэтому используется однобайтовая система кодирования. В этом наборе правил кодирования люди один за другим сопоставляют символы требуемого набора символов со 128 двоичными числами.Старший бит этих 128 двоичных чисел равен 0, а оставшиеся младшие 7 бит используются для формирования 00000000~01111111 (0X00 ~0X7F).
32 двоичных числа от 0X00 до 0X1F используются для кодирования управляющих символов или коммуникационных символов (таких как перевод строки LF, удаление DEL, возврат BS), а 96 двоичных чисел от 0X20 до 0X7F используются для кодирования арабских цифр, английских букв. прописные и строчные буквы, символы подчеркивания, круглые скобки и другие символы кодируются.Процесс преобразования этого набора символов в двоичный код 0X00~0X7F называется базовой кодировкой ASCII., с помощью этого процесса кодирования компьютер преобразует человеческий язык в свой собственный язык и сохраняет его; напротив, процесс считывания вторичных чисел с диска и преобразования их в буквенно-цифровые символы для отображения являетсярасшифровка.
С быстрым продвижением и использованием компьютеров люди в неанглоязычных странах Европы обнаружили, что этого набора символов, разработанного американцами, недостаточно.Например, некоторые символы с диакритическими знаками, греческие буквы и т. д. не были в этом наборе символов. .Поэтому правила кодирования ASCII были расширены, а старший бит, который изначально был равен 0, был изменен на 1, поэтому 128 двоичных чисел от 10000000 до 11111111 (0X80~0XFF) были расширены.. Среди них наилучшей схемой расширения является ISO 8859-1, обычно именуемыйLatin-1. Latin-1 использует 128 двоичных чисел от 128 до 255, включая дополнительные наборы символов, достаточные для охвата основных западноевропейских языков, и совместим с правилами кодирования ASCII в диапазоне от 0 до 127.
По мере того, как все больше и больше стран используют компьютеры, набор символов, который необходимо кодировать, естественным образом становится все больше и больше.Предыдущий набор символов, закодированный в ASCII, ограничен одним байтом, и его емкость далеко не достаточна.Тысячи китайских символов, давление можно представить.Поэтому Главное управление стандартов Китая выпустило набор национальных стандартов для «Набора кодированных символов китайских иероглифов для обмена информацией», стандартный номер которого — GB 2312-1980.. Этот набор символов содержит 6763 китайских символа и 682 некитайских графических символа, использует два байта для кодирования набора символов и обратно совместим с кодировкой ASCII. Короче говоря, весь набор символов разделен на 94 области, каждая область имеет 94 бита, и байт используется для представления соответствующей области и бита. Каждое местоположение соответствует символу, поэтому местоположение и местоположение можно использовать для кодирования двухбайтовых китайских символов.Позже в набор символов были также включены необычные символы, традиционные символы, а также японские и корейские символы, а затем появился набор символов GBK и соответствующая спецификация кодирования.Спецификация кодирования GBK также обратно совместима с GBK2312.
Одновременно с развитием Китая компьютеры продолжают популяризироваться в разных странах мира. В разных странах и регионах будет разрабатываться собственный набор систем кодирования. Поэтому системы кодирования разнообразны. В это время проблема начинает становиться видное место, особенно в среде Интернет-общения.В этом случае общение между компьютерами с разными системами кодирования не будет знать, что «говорит» другая сторона.После того, как требуемые символы будут преобразованы в двоичные коды в соответствии с методом кодирования Система кодирования, они расшифровываются на компьютере системы кодирования B. Вы не можете получить исходные символы, вместо этого будут какие-то неожиданно странные символы, которые называютсяискаженный.
Тогда перед всеми срочно ставится требование единой кодировки символов.Для выполнения требований к межъязыковому и кроссплатформенному преобразованию и обработке текста Международная организация по стандартизации ИСО предложила новый стандарт для Unicode., который содержит набор символов Unicode и набор спецификаций кодирования.Набор символов Unicode охватывает все текстовые и символьные символы в мире.Схема кодирования Unicode определяет единую и уникальную двоичную кодировку для каждого символа в наборе символов., который может полностью решить конфликтные и искаженные проблемы различных систем кодирования ранее. Эта схема кодирования выглядит следующим образом: спецификация кодирования содержит 17 групп (называемых плоскостями), каждая группа содержит 65536 кодовых точек (например, группа 0 — это 0X0000~0XFFFF), и каждая кодовая точка соответствует одному уникальному символу, большинство из которых символы расположены в кодовой точке плоскости набора символов 0, и небольшое количество находится в других плоскостях.
Концептуальное различие между кодировкой символов и кодом символов
Теперь, когда упоминается кодировка Unicode, какие схемы кодирования UTF-8 и UTF-16 часто сопровождают ее?Фактически, до сих пор мы смешивали два понятия, а именнокод символаиКодировка символов, код символа — это порядковый номер определенного символа в наборе символов, а код символа — это двоичная последовательность в байтах, используемая для представления символов во время передачи и хранения. В системе кодирования ASCII код символа и кодировка символов согласованы, например, символ A, порядковый номер в наборе символов ASCII, то есть так называемый код символа равен 65, и последовательность двоичных битов, хранящаяся на диске равно 01000001 (0X41, десятичное тоже 65), кроме того, например, в системе кодирования GB2312 значения кода символа и кода символа также совпадают, поэтому разницу между ними мы практически игнорируем.
В стандарте Unicode мы в настоящее время используем UCS-4, то есть код каждого символа в наборе символов представлен 4 байтами, из которых код символа 0~127 совместим с набором символов ASCII, общий общие китайские иероглифы Коды символов 65535 также сосредоточены перед 65535, и используются коды символов больше 65535, то есть коды символов, для представления которых требуется более двух байтов, относительно немногочисленны. Поэтому, если метод кодирования, соответствующий коду символа и кодировке символов, все еще используется, английским буквам и цифрам изначально требуется только один байт для кодирования, но в настоящее время им требуется 4 байта для кодирования, а китайским символам изначально требуется только два байта. для кодирования в настоящее время также требуется 4 байта для кодирования, что нерентабельно для ресурсов хранения или передачи.
Следовательно, необходимо перекодировать между кодами символов и кодами символов, что приводит к таким методам кодирования, как UTF-8 и UTF-16.Исходя из вышеизложенных требований, UTF-8 должен преобразовывать коды символов в разных диапазонах в коды символов разной длины.В то же время этот метод кодирования основан на байтах и полностью совместим с кодировкой ASCII, то есть кодами символов и символы 0X00-0X7F.Кодировка точно такая же, и один байт используется для кодирования набора символов ASCII, в то время как код символа часто используемых китайских символов в Unicode - 4E00-9FA5.В переписке в конце текста , мы видим, что три байта используются для кодирования китайских символов. Точно так же UTF-16 перекодирует коды символов в наборе символов Unicode с 16-битными двоичными числами в качестве базовой единицы.Принцип тот же, что и в UTF-8.
Таким образом, мы видим, что в контексте текущей глобальной взаимосвязи набор символов Unicode и метод кодирования решают проблему межъязыкового и кроссплатформенного взаимодействия, и в то же время такие методы кодирования, как UTF-8, могут эффективно экономия места для хранения и полосы пропускания передачи., который был широко продвинут и применен.
[Сестра сказала] История хорошо рассказана. Раньше мне казалось, что я путаюсь в этих понятиях. Этот эпизод ясно объясняет историю развития кодирования символов. Людям легко понять, почему тот или иной метод кодирования появился в определенный момент. После входы и выходы, легко понять кодировку символов.
Расписание:
Соответствие между кодами символов Unicode и кодировкой UTF-8
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
QR-код официального аккаунта: специалист по данным python: