Я запутался в кодировке текста и кодировке. По многим причинам, я должен изучать не-Unicode, не-UTF8 материал в моей предстоящей работе.
Я нахожу слово «charset» в заголовках писем, как в «ISO-2022-JP», но в текстовых редакторах такой кодировки нет. (Я осмотрел разные текстовые редакторы.)
В чем разница между кодировкой текста и кодировкой? Буду признателен, если вы покажете мне несколько примеров использования.
Ответы:
В принципе:
источник
С каждой кодировкой связана определенная кодировка, но для данной кодировки может быть несколько кодировок. Charset - это просто набор символов. Существует большое количество кодировок, включая множество, предназначенных для определенных сценариев или языков.
Тем не менее, мы находимся на пути перехода к 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 были тривиальными (кодовая точка = кодовая единица = байт). Таким образом, в старых протоколах не было четкого различия между «кодировкой символов» и «набором кодированных символов». Старые протоколы используют,
charset
когда они действительно означают кодирование.источник
Пролить больше света для людей, посещающих отныне, надеюсь, это будет полезно.
Набор символов
На каждом языке есть символы, и набор этих символов образует «набор символов» этого языка. Когда символ закодирован, ему присваивается уникальный идентификатор или номер, называемый кодовой точкой. В компьютере эти кодовые точки будут представлены одним или несколькими байтами.
Примеры набора символов : ASCII (охватывает все английские символы), ISO / IEC 646, Unicode (охватывает символы всех живых языков в мире)
Набор кодированных символов
Набор кодированных символов - это набор, в котором каждому персонажу присваивается уникальный номер. Этот уникальный номер называется «кодовая точка».
Наборы кодированных символов иногда называют кодовыми страницами.
кодирование
Кодирование - это механизм сопоставления кодовых точек с некоторыми байтами, чтобы символ мог быть прочитан и записан равномерно в разных системах с использованием одной и той же схемы кодирования.
Примеры кодирования: ASCII, схемы кодирования Unicode, такие как UTF-8, UTF-16, UTF-32.
Разработка вышеуказанных 3 концепций
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. Юникод проходит через серию абстракций. абстрактные символы -> кодовые точки -> кодирование кодовых точек в байты.
Charsets фактически пропускают это и непосредственно переходят от символов к байтам. последовательность байтов <-> последовательность символов
Короче говоря, кодировка: кодовые точки -> байты charset: символы -> байты
источник
Кодировка - это просто набор; он либо содержит, например, знак евро, либо нет. Вот и все.
Кодировка - это биективное отображение набора символов в набор целых чисел. Если он поддерживает знак евро, он должен присвоить конкретное целое число этому символу и никому другому.
источник
На мой взгляд, кодировка является частью кодировки (компонента), кодировка имеет атрибут charset, поэтому кодировка может использоваться во многих кодировках. Например, юникод - это кодировка, используемая в таких кодировках, как UTF-8, UTF-16 и так далее. Смотрите иллюстрацию здесь:
Символ char в charset не означает тип char в мире программирования, он означает char в реальном мире, в английском это может быть то же самое, но в других языках, не таких как китайский, '我' является неотъемлемым 'char' в charsets (UNICODE, GB [используется в GBK и GB2312]), «a» также является символом в кодировках (ASCII, ISO-8859 , UNICODE).
источник
По моему мнению, слово «charset» должно быть ограничено идентификацией параметра, используемого в HTTP, MIME и аналогичных стандартах для указания кодировки символов (сопоставления из серии текстовых символов в последовательность байтов) по имени. Например:
charset=utf-8
.Однако я знаю, что MySQL, Java и другие места могут использовать слово «charset» для обозначения кодировки символов.
источник
Кодировка - это отображение между байтами и символами из набора символов, поэтому будет полезно обсудить и понять разницу между байтами и символами .
Думайте о байтах как числах от 0 до 255, тогда как символы - это абстрактные вещи, такие как «a», «1», «$» и «Ä». Набор всех доступных символов называется набором символов .
Каждый символ имеет последовательность из одного или нескольких байтов, которые используются для его представления; однако точное число и значение байтов зависит от используемой кодировки, и существует множество различных кодировок.
Большинство кодировок основано на старом наборе символов и кодировке, называемой ASCII, которая представляет собой один байт на символ (фактически только 7 бит) и содержит 128 символов, включая множество общих символов, используемых в американском английском языке.
Например, здесь есть 6 символов в наборе символов ASCII, которые представлены значениями от 60 до 65.
В полном наборе 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 или может быть указана в текстовом редакторе. Он сообщает системе отображение между байтами и символами.
источник