Какая разница между кодировкой и кодировкой?

Я запутался в кодировке текста и кодировке. По многим причинам я должен изучите не-Unicode, не-UTF8 в моей предстоящей работе.

Я нахожу слово "charset" в заголовках электронной почты, как в "ISO-2022-JP", но там нет такое кодирование в текстовых редакторах. (Я просмотрел различные текстовые редакторы.)

В чем разница между кодировкой текста и кодировкой? Буду признателен если бы вы могли показать мне примеры использования.

Ответ 1

В принципе:

  • charset - набор символов, которые вы можете использовать
  • кодирование - это способ сохранения этих символов в памяти

Ответ 2

Каждая кодировка имеет определенную кодировку, связанную с ней, но может быть более одной кодировки для данной кодировки. Кодировка - это просто то, на что это похоже, набор символов. Существует большое количество кодировок, в том числе множество, предназначенных для определенных скриптов или языков.

Однако мы хорошо продвигаемся по пути перехода к Unicode, который включает набор символов, способный отображать почти все мировые скрипты. Однако для Unicode существует несколько кодировок. Кодировка - это способ отображения строки символов в строку байтов. Примеры кодировок Unicode включают UTF-8, UTF-16 BE, и UTF-16 LE. Каждый из них имеет преимущества для конкретных приложений или архитектур машин.

Ответ 3

В дополнение к другим ответам я думаю, что эта статья хорошо читается http://www.joelonsoftware.com/articles/Unicode.html

Статья называется " Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (без отговорок!)", написанный Джоэл Спольский. Эссе более 10 лет, но (к сожалению) содержание остается в силе...

Ответ 4

Кодировка символов состоит из:

  • Набор поддерживаемых символов
  • Отображение между символами и целыми числами ( "кодовые точки" )
  • Как кодовые точки кодируются как серия "кодовых блоков" (например, 16-битные единицы для UTF-16)
  • Как кодовые единицы кодируются в байты (например, big-endian или little-endian)

Шаг №1 сам по себе является "репертуаром персонажа" или абстрактным "набором символов", а # 1 + # 2 = "кодированным набором символов".

Но до того, как Unicode стал популярным, и все (кроме восточных азиатов) использовали однобайтную кодировку, шаги № 3 и № 4 были тривиальными (code point = code unit = byte). Таким образом, устаревшие протоколы четко не различали "кодировку символов" и "кодированный набор символов". Более старые протоколы используют charset, когда они действительно означают кодировку.

Ответ 5

Пролить больше света для людей, посещающих отныне, надеюсь, это будет полезно.


Набор символов

Есть символы на каждом языке, и коллекция этих символов формирует "набор символов" этого языка. Когда символ закодирован, ему присваивается уникальный идентификатор или номер, называемый кодовой точкой. В компьютере эти кодовые точки будут представлены одним или несколькими байтами.

Примеры набора символов : ASCII (охватывает все английские символы), ISO/IEC 646, Unicode (охватывает символы всех живых языков мира)

Набор кодированных символов

Набор кодированных символов - это набор, в котором каждому персонажу присваивается уникальный номер. Этот уникальный номер называется "кодовая точка".
Наборы кодированных символов иногда называют кодовыми страницами.

кодирование

Кодирование - это механизм сопоставления кодовых точек с некоторыми байтами, чтобы символ можно было считывать и записывать равномерно в разных системах, используя одну и ту же схему кодирования.

Примеры кодирования: ASCII, схемы кодирования Unicode, такие как UTF-8, UTF-16, UTF-32.

Разработка вышеуказанных 3 концепций

  • Учтите это: символ 'क' в наборе символов деванагари имеет десятичную кодовую точку 2325, которая будет представлена двумя байтами (09 15) при использовании кодировки UTF-16
  • В схеме кодирования "ISO-8859-1" "ü" (это не что иное, как символ в латинском наборе символов) представляется как шестнадцатеричное значение FC тогда как в "UTF-8" оно представлено как C3 BC и в UTF- 16 как FE FF 00 FC.
  • Различные схемы кодирования могут использовать одну и ту же кодовую точку для представления разных символов, например, в "ISO-8859-1" (также называемом Latin1) значение десятичной кодовой точки для буквы "é" равно 233. Однако в ISO 8859-5, та же самая кодовая точка представляет символ кириллицы 'щ.
  • С другой стороны, одна кодовая точка в наборе символов Unicode может фактически отображаться в разные последовательности байтов в зависимости от того, какое кодирование использовалось для документа. Символ Деванагари क с кодовой точкой 2325 (которая равна 915 в шестнадцатеричной записи) будет представлен двумя байтами при использовании кодировки UTF-16 (09 15), тремя байтами с UTF-8 (E0 A4 95) или четырьмя байтов с UTF-32 (00 00 09 15)

Ответ 6

Набор символов или репертуар персонажей - это просто набор (неупорядоченный набор) символов. Кодированный набор символов присваивает каждому символу в репертуаре целое число ( "кодовую точку" ). Кодировка - это способ представления кодовых точек однозначно как поток байтов.

Ответ 7

Погубился за это. http://en.wikipedia.org/wiki/Character_encoding

Разница кажется тонкой. Термин charset на самом деле не применяется к Unicode. Unicode проходит через ряд абстракций. абстрактные символы → кодовые точки → кодирование кодовых точек на байты.

Шрифты фактически пропускают это и непосредственно переходят от символов к байтам. последовательность байтов ↔ последовательность символов

Короче говоря, кодирование: кодовые точки → байты charset: characters → bytes

Ответ 8

Кодировка - это просто набор; он либо содержит, например. знак евро, иначе это не так. Это все.

Кодировка представляет собой биективное отображение из набора символов в набор целых чисел. Если он поддерживает знак Euro, он должен назначить конкретное целое число этому символу и никому другому.

Ответ 9

По моему мнению, слово "charset" должно быть ограничено идентификацией параметра, используемого в HTTP, MIME и подобных стандартах, для указания кодировки символов (сопоставление от последовательности текстовых символов до последовательности байтов) по имени. Например: charset=utf-8.

Я знаю, однако, что MySQL, Java и другие места могут использовать слово "charset" для обозначения кодировки символов.

Ответ 10

Кодировка - это сопоставление между байтами и символами из набора символов, поэтому полезно обсудить и понять разницу между байтами и символами.

Подумайте о байтах как числа от 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 или может быть указана в текстовом редакторе. Он указывает системе сопоставление между байтами и символами.

Ответ 11

На мой взгляд, кодировка является частью кодировки (компонента), кодировка имеет атрибут charset, поэтому кодировка может использоваться во многих кодировках. Например, юникод - это кодировка, используемая в таких кодировках, как UTF-8, UTF-16 и так далее. Смотрите иллюстрацию здесь: See illustration here

Символ char в charset не означает тип char в мире программирования, он означает char в реальном мире, в английском это может быть то же самое, но в других языках, не таких, как китайский, '我' является неотъемлемым 'char' в charsets (UNICODE, GB [используется в GBK и GB2312]), "a" также является символом в кодировках (ASCII, ISO-8859, UNICODE).