Ответ 1
В принципе:
- charset - набор символов, которые вы можете использовать
- кодирование - это способ сохранения этих символов в памяти
Я запутался в кодировке текста и кодировке. По многим причинам я должен изучите не-Unicode, не-UTF8 в моей предстоящей работе.
Я нахожу слово "charset" в заголовках электронной почты, как в "ISO-2022-JP", но там нет такое кодирование в текстовых редакторах. (Я просмотрел различные текстовые редакторы.)
В чем разница между кодировкой текста и кодировкой? Буду признателен если бы вы могли показать мне примеры использования.
В принципе:
Каждая кодировка имеет определенную кодировку, связанную с ней, но может быть более одной кодировки для данной кодировки. Кодировка - это просто то, на что это похоже, набор символов. Существует большое количество кодировок, в том числе множество, предназначенных для определенных скриптов или языков.
Однако мы хорошо продвигаемся по пути перехода к Unicode, который включает набор символов, способный отображать почти все мировые скрипты. Однако для Unicode существует несколько кодировок. Кодировка - это способ отображения строки символов в строку байтов. Примеры кодировок Unicode включают UTF-8, UTF-16 BE, и UTF-16 LE. Каждый из них имеет преимущества для конкретных приложений или архитектур машин.
В дополнение к другим ответам я думаю, что эта статья хорошо читается http://www.joelonsoftware.com/articles/Unicode.html
Статья называется " Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (без отговорок!)", написанный Джоэл Спольский. Эссе более 10 лет, но (к сожалению) содержание остается в силе...
Кодировка символов состоит из:
Шаг №1 сам по себе является "репертуаром персонажа" или абстрактным "набором символов", а # 1 + # 2 = "кодированным набором символов".
Но до того, как Unicode стал популярным, и все (кроме восточных азиатов) использовали однобайтную кодировку, шаги № 3 и № 4 были тривиальными (code point = code unit = byte). Таким образом, устаревшие протоколы четко не различали "кодировку символов" и "кодированный набор символов". Более старые протоколы используют charset
, когда они действительно означают кодировку.
Пролить больше света для людей, посещающих отныне, надеюсь, это будет полезно.
Есть символы на каждом языке, и коллекция этих символов формирует "набор символов" этого языка. Когда символ закодирован, ему присваивается уникальный идентификатор или номер, называемый кодовой точкой. В компьютере эти кодовые точки будут представлены одним или несколькими байтами.
Примеры набора символов : ASCII (охватывает все английские символы), ISO/IEC 646, Unicode (охватывает символы всех живых языков мира)
Набор кодированных символов - это набор, в котором каждому персонажу присваивается уникальный номер. Этот уникальный номер называется "кодовая точка".
Наборы кодированных символов иногда называют кодовыми страницами.
Кодирование - это механизм сопоставления кодовых точек с некоторыми байтами, чтобы символ можно было считывать и записывать равномерно в разных системах, используя одну и ту же схему кодирования.
Примеры кодирования: ASCII, схемы кодирования Unicode, такие как UTF-8, UTF-16, UTF-32.
09 15
) при использовании кодировки UTF-16FC
тогда как в "UTF-8" оно представлено как C3 BC
и в UTF- 16 как FE FF 00 FC
.09 15
), тремя байтами с UTF-8 (E0 A4 95
) или четырьмя байтов с UTF-32 (00 00 09 15
)Набор символов или репертуар персонажей - это просто набор (неупорядоченный набор) символов. Кодированный набор символов присваивает каждому символу в репертуаре целое число ( "кодовую точку" ). Кодировка - это способ представления кодовых точек однозначно как поток байтов.
Погубился за это. http://en.wikipedia.org/wiki/Character_encoding
Разница кажется тонкой. Термин charset на самом деле не применяется к Unicode. Unicode проходит через ряд абстракций. абстрактные символы → кодовые точки → кодирование кодовых точек на байты.
Шрифты фактически пропускают это и непосредственно переходят от символов к байтам. последовательность байтов ↔ последовательность символов
Короче говоря, кодирование: кодовые точки → байты charset: characters → bytes
Кодировка - это просто набор; он либо содержит, например. знак евро, иначе это не так. Это все.
Кодировка представляет собой биективное отображение из набора символов в набор целых чисел. Если он поддерживает знак Euro, он должен назначить конкретное целое число этому символу и никому другому.
По моему мнению, слово "charset" должно быть ограничено идентификацией параметра, используемого в HTTP, MIME и подобных стандартах, для указания кодировки символов (сопоставление от последовательности текстовых символов до последовательности байтов) по имени. Например: charset=utf-8
.
Я знаю, однако, что MySQL, Java и другие места могут использовать слово "charset" для обозначения кодировки символов.
Кодировка - это сопоставление между байтами и символами из набора символов, поэтому полезно обсудить и понять разницу между байтами и символами.
Подумайте о байтах как числа от 0 до 255, тогда как символы - абстрактные вещи типа "a", "1", "$" и "Ä". Набор всех доступных символов называется набором символов.
Каждый символ имеет последовательность из одного или нескольких байтов, которые используются для его представления; однако точное количество и значение байтов зависит от используемой кодировки и существует множество разных кодировок.
Большинство кодировок основаны на старом наборе символов и кодировке под названием ASCII, который представляет собой один байт на символ (фактически, всего 7 бит) и содержит 128 символов, включая множество общих символов, используемых на английском языке.
Например, здесь 6 символов в наборе символов ASCII, которые представлены значениями от 60 до 65.
Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║ Character ║
╠══════╬══════════════║
║ 60 ║ < ║
║ 61 ║ = ║
║ 62 ║ > ║
║ 63 ║ ? ║
║ 64 ║ @ ║
║ 65 ║ A ║
╚══════╩══════════════╝
В полном наборе ASCII самое низкое значение - ноль, а самое высокое - 127 (оба из них - скрытые управляющие символы).
Однако, как только вы начнете нуждаться в большем количестве символов, чем базовый ASCII (например, буквы с акцентами, символы валюты, графические символы и т.д.), ASCII не подходит, и вам нужно что-то более обширное. Вам нужно больше символов (другой набор символов), и вам понадобится другая кодировка, так как для символов всех символов недостаточно 128 символов. Некоторые кодировки предлагают один байт (256 символов) или до шести байтов.
Со временем было создано множество кодировок. В мире Windows есть CP1252 или ISO-8859-1, тогда как пользователи Linux предпочитают UTF-8. Java использует UTF-16 изначально.
Одна последовательность байтовых значений для символа в одной кодировке может означать совершенно другой символ в другой кодировке или может быть даже недействительной.
Например, в ISO 8859-1, â представлен одним байтом значения 226
, тогда как в UTF-8 это два байта: 195, 162
. Однако в ISO 8859-1, 195, 162
было бы два символа, Ã, ¢.
Когда компьютеры хранят данные о символах внутри страны или передают их в другую систему, они хранят или отправляют байты. Представьте, что система, открывающая файл или получающее сообщение, видит байты 195, 162
. Как он знает, что это за персонажи?
Чтобы система могла интерпретировать эти байты как действительные символы (и поэтому отображать их или преобразовывать в другую кодировку), она должна знать используемую кодировку. Вот почему кодировка появляется в заголовках XML или может быть указана в текстовом редакторе. Он указывает системе сопоставление между байтами и символами.
На мой взгляд, кодировка является частью кодировки (компонента), кодировка имеет атрибут charset, поэтому кодировка может использоваться во многих кодировках. Например, юникод - это кодировка, используемая в таких кодировках, как UTF-8, UTF-16 и так далее. Смотрите иллюстрацию здесь:
Символ char в charset не означает тип char в мире программирования, он означает char в реальном мире, в английском это может быть то же самое, но в других языках, не таких, как китайский, '我' является неотъемлемым 'char' в charsets (UNICODE, GB [используется в GBK и GB2312]), "a" также является символом в кодировках (ASCII, ISO-8859, UNICODE).