Кодировка HTML уроки для начинающих академия
❮ Назад Дальше ❯
Для правильного отображения HTML-страницы веб-обозреватель должен знать, какой набор символов (кодировка) следует использовать.
Что такое кодировка символов?
ASCII был первым стандартом кодировки символов (также называемым набором символов). ASCII определены 128 различных буквенно-цифровых символов, которые могут быть использованы в Интернете: цифры (0-9), английские буквы (a-Z), и некоторые специальные символы, как! $ +-() @ < >.
ANSI (Windows-1252) был оригинальный набор символов Windows, с поддержкой 256 различных кодов символов.
ISO-8859-1 был стандартным набором символов для HTML 4. Этот набор символов также поддерживает 256 различные коды символов.
Так как ANSI и ISO-8859-1 были настолько ограничены, HTML 4 также поддерживал UTF-8.
UTF-8 (Юникод) охватывает почти все символы и символы в мире.
Кодировка символов по умолчанию для HTML5 — UTF-8.
Атрибут HTML-кодировки
Для правильного отображения HTML-страницы веб-обозреватель должен знать кодировку, используемую на странице.
Это указано в теге <meta>
:
Для HTML4:
<meta http-equiv=»Content-Type» content=»text/html;charset=ISO-8859-1″>
Для HTML5:
<meta charset=»UTF-8″>
Если браузер обнаруживает ISO-8859-1 на веб-странице, по умолчанию используется ANSI, так как ANSI идентичен ISO-8859-1 за исключением того, что ANSI имеет 32 дополнительных символов.
Различия между наборами символов
В следующей таблице показаны различия между наборами символов, описанными выше:
Numb | ASCII | ANSI | 8859 | UTF-8 | Описание |
---|---|---|---|---|---|
32 | space | ||||
33 | ! | ! | ! | ! | exclamation mark |
34 | « | « | « | « | quotation mark |
35 | # | # | # | # | number sign |
36 | $ | $ | $ | $ | dollar sign |
37 | % | % | % | % | percent sign |
38 | & | & | & | & | ampersand |
39 | ‘ | ‘ | ‘ | ‘ | apostrophe |
40 | ( | ( | ( | ( | left parenthesis |
41 | ) | ) | ) | ) | right parenthesis |
42 | * | * | * | * | asterisk |
43 | + | + | + | + | plus sign |
44 | , | , | , | , | comma |
45 | — | — | — | — | hyphen-minus |
46 | .![]() | . | . | . | full stop |
47 | / | / | / | / | solidus |
48 | 0 | 0 | 0 | 0 | digit zero |
49 | 1 | 1 | 1 | 1 | digit one |
50 | 2 | 2 | 2 | 2 | digit two |
51 | 3 | 3 | 3 | 3 | digit three |
52 | 4 | 4 | 4 | 4 | digit four |
53 | 5 | 5 | 5 | 5 | digit five |
54 | 6 | 6 | 6 | 6 | digit six |
55 | 7 | 7 | 7 | 7 | digit seven |
56 | 8 | 8 | 8 | 8 | digit eight |
57 | 9 | 9 | 9 | 9 | digit nine |
58 | : | : | : | : | colon |
59 | ; | ; | ; | ; | semicolon |
60 | < | < | < | < | less-than sign |
61 | = | = | = | = | equals sign |
62 | > | > | > | > | greater-than sign |
63 | ? | ? | ? | ? | question mark |
64 | @ | @ | @ | @ | commercial at |
65 | A | A | A | A | Latin capital letter A |
66 | B | B | B | B | Latin capital letter B |
67 | C | C | C | C | Latin capital letter C |
68 | D | D | D | D | Latin capital letter D |
69 | E | E | E | E | Latin capital letter E |
70 | F | F | F | F | Latin capital letter F |
71 | G | G | G | G | Latin capital letter G |
72 | H | H | H | H | Latin capital letter H |
73 | I | I | I | I | Latin capital letter I |
74 | J | J | J | J | Latin capital letter J |
75 | K | K | K | K | Latin capital letter K |
76 | L | L | L | L | Latin capital letter L |
77 | M | M | M | M | Latin capital letter M |
78 | N | N | N | N | Latin capital letter N |
79 | O | O | O | O | Latin capital letter O |
80 | P | P | P | P | Latin capital letter P |
81 | Q | Q | Q | Q | Latin capital letter Q |
82 | R | R | R | R | Latin capital letter R |
83 | S | S | S | S | Latin capital letter S |
84 | T | T | T | T | Latin capital letter T |
85 | U | U | U | U | Latin capital letter U |
86 | V | V | V | V | Latin capital letter V |
87 | W | W | W | W | Latin capital letter W |
88 | X | X | X | X | Latin capital letter X |
89 | Y | Y | Y | Y | Latin capital letter Y |
90 | Z | Z | Z | Z | Latin capital letter Z |
91 | [ | [ | [ | [ | left square bracket |
92 | \ | \ | \ | \ | reverse solidus |
93 | ] | ] | ] | ] | right square bracket |
94 | ^ | ^ | ^ | ^ | circumflex accent |
95 | _ | _ | _ | _ | low line |
96 | ` | ` | ` | ` | grave accent |
97 | a | a | a | a | Latin small letter a |
98 | b | b | b | b | Latin small letter b |
99 | c | c | c | c | Latin small letter c |
100 | d | d | d | d | Latin small letter d |
101 | e | e | e | e | Latin small letter e |
102 | f | f | f | f | Latin small letter f |
103 | g | g | g | g | Latin small letter g |
104 | h | h | h | h | Latin small letter h |
105 | i | i | i | i | Latin small letter i |
106 | j | j | j | j | Latin small letter j |
107 | k | k | k | k | Latin small letter k |
108 | l | l | l | l | Latin small letter l |
109 | m | m | m | m | Latin small letter m |
110 | n | n | n | n | Latin small letter n |
111 | o | o | o | o | Latin small letter o |
112 | p | p | p | p | Latin small letter p |
113 | q | q | q | q | Latin small letter q |
114 | r | r | r | r | Latin small letter r |
115 | s | s | s | s | Latin small letter s |
116 | t | t | t | t | Latin small letter t |
117 | u | u | u | u | Latin small letter u |
118 | v | v | v | v | Latin small letter v |
119 | w | w | w | w | Latin small letter w |
120 | x | x | x | x | Latin small letter x |
121 | y | y | y | y | Latin small letter y |
122 | z | z | z | z | Latin small letter z |
123 | { | { | { | { | left curly bracket |
124 | | | | | | | | | vertical line |
125 | } | } | } | } | right curly bracket |
126 | ~ | ~ | ~ | ~ | tilde |
127 | DEL | ||||
128 | | euro sign | |||
129 | | | | NOT USED | |
130 | | single low-9 quotation mark | |||
131 | | Latin small letter f with hook | |||
132 | | double low-9 quotation mark | |||
133 | horizontal ellipsis | ||||
134 | | dagger | |||
135 | | double dagger | |||
136 | | modifier letter circumflex accent | |||
137 | | per mille sign | |||
138 | | Latin capital letter S with caron | |||
139 | | single left-pointing angle quotation mark | |||
140 | | Latin capital ligature OE | |||
141 | | | | NOT USED | |
142 | | Latin capital letter Z with caron | |||
143 | | | | NOT USED | |
144 | | | | NOT USED | |
145 | | left single quotation mark | |||
146 | | right single quotation mark | |||
147 | | left double quotation mark | |||
148 | | right double quotation mark | |||
149 | | bullet | |||
150 | | en dash | |||
151 | | em dash | |||
152 | | small tilde | |||
153 | | trade mark sign | |||
154 | | Latin small letter s with caron | |||
155 | | single right-pointing angle quotation mark | |||
156 | | Latin small ligature oe | |||
157 | | | | NOT USED | |
158 | | Latin small letter z with caron | |||
159 | | Latin capital letter Y with diaeresis | |||
160 | no-break space | ||||
161 | ¡ | ¡ | ¡ | inverted exclamation mark | |
162 | ¢ | ¢ | ¢ | cent sign | |
163 | £ | £ | £ | pound sign | |
164 | ¤ | ¤ | ¤ | currency sign | |
165 | ¥ | ¥ | ¥ | yen sign | |
166 | ¦ | ¦ | ¦ | broken bar | |
167 | § | § | § | section sign | |
168 | ¨ | ¨ | ¨ | diaeresis | |
169 | © | © | © | copyright sign | |
170 | ª | ª | ª | feminine ordinal indicator | |
171 | « | « | « | left-pointing double angle quotation mark | |
172 | ¬ | ¬ | ¬ | not sign | |
173 | | | soft hyphen | ||
174 | ® | ® | ® | registered sign | |
175 | ¯ | ¯ | ¯ | macron | |
176 | ° | ° | ° | degree sign | |
177 | ± | ± | ± | plus-minus sign | |
178 | ² | ² | ² | superscript two | |
179 | ³ | ³ | ³ | superscript three | |
180 | ´ | ´ | ´ | acute accent | |
181 | µ | µ | µ | micro sign | |
182 | ¶ | ¶ | ¶ | pilcrow sign | |
183 | · | · | · | middle dot | |
184 | ¸ | ¸ | ¸ | cedilla | |
185 | ¹ | ¹ | ¹ | superscript one | |
186 | º | º | º | masculine ordinal indicator | |
187 | » | » | » | right-pointing double angle quotation mark | |
188 | ¼ | ¼ | ¼ | vulgar fraction one quarter | |
189 | ½ | ½ | ½ | vulgar fraction one half | |
190 | ¾ | ¾ | ¾ | vulgar fraction three quarters | |
191 | ¿ | ¿ | ¿ | inverted question mark | |
192 | À | À | À | Latin capital letter A with grave | |
193 | Á | Á | Á | Latin capital letter A with acute | |
194 | Â | Â | Â | Latin capital letter A with circumflex | |
195 | Ã | Ã | Ã | Latin capital letter A with tilde | |
196 | Ä | Ä | Ä | Latin capital letter A with diaeresis | |
197 | Å | Å | Å | Latin capital letter A with ring above | |
198 | Æ | Æ | Æ | Latin capital letter AE | |
199 | Ç | Ç | Ç | Latin capital letter C with cedilla | |
200 | È | È | È | Latin capital letter E with grave | |
201 | É | É | É | Latin capital letter E with acute | |
202 | Ê | Ê | Ê | Latin capital letter E with circumflex | |
203 | Ë | Ë | Ë | Latin capital letter E with diaeresis | |
204 | Ì | Ì | Ì | Latin capital letter I with grave | |
205 | Í | Í | Í | Latin capital letter I with acute | |
206 | Î | Î | Î | Latin capital letter I with circumflex | |
207 | Ï | Ï | Ï | Latin capital letter I with diaeresis | |
208 | Ð | Ð | Ð | Latin capital letter Eth | |
209 | Ñ | Ñ | Ñ | Latin capital letter N with tilde | |
210 | Ò | Ò | Ò | Latin capital letter O with grave | |
211 | Ó | Ó | Ó | Latin capital letter O with acute | |
212 | Ô | Ô | Ô | Latin capital letter O with circumflex | |
213 | Õ | Õ | Õ | Latin capital letter O with tilde | |
214 | Ö | Ö | Ö | Latin capital letter O with diaeresis | |
215 | × | × | × | multiplication sign | |
216 | Ø | Ø | Ø | Latin capital letter O with stroke | |
217 | Ù | Ù | Ù | Latin capital letter U with grave | |
218 | Ú | Ú | Ú | Latin capital letter U with acute | |
219 | Û | Û | Û | Latin capital letter U with circumflex | |
220 | Ü | Ü | Ü | Latin capital letter U with diaeresis | |
221 | Ý | Ý | Ý | Latin capital letter Y with acute | |
222 | Þ | Þ | Þ | Latin capital letter Thorn | |
223 | ß | ß | ß | Latin small letter sharp s | |
224 | à | à | à | Latin small letter a with grave | |
225 | á | á | á | Latin small letter a with acute | |
226 | â | â | â | Latin small letter a with circumflex | |
227 | ã | ã | ã | Latin small letter a with tilde | |
228 | ä | ä | ä | Latin small letter a with diaeresis | |
229 | å | å | å | Latin small letter a with ring above | |
230 | æ | æ | æ | Latin small letter ae | |
231 | ç | ç | ç | Latin small letter c with cedilla | |
232 | è | è | è | Latin small letter e with grave | |
233 | é | é | é | Latin small letter e with acute | |
234 | ê | ê | ê | Latin small letter e with circumflex | |
235 | ë | ë | ë | Latin small letter e with diaeresis | |
236 | ì | ì | ì | Latin small letter i with grave | |
237 | í | í | í | Latin small letter i with acute | |
238 | î | î | î | Latin small letter i with circumflex | |
239 | ï | ï | ï | Latin small letter i with diaeresis | |
240 | ð | ð | ð | Latin small letter eth | |
241 | ñ | ñ | ñ | Latin small letter n with tilde | |
242 | ò | ò | ò | Latin small letter o with grave | |
243 | ó | ó | ó | Latin small letter o with acute | |
244 | ô | ô | ô | Latin small letter o with circumflex | |
245 | õ | õ | õ | Latin small letter o with tilde | |
246 | ö | ö | ö | Latin small letter o with diaeresis | |
247 | ÷ | ÷ | ÷ | division sign | |
248 | ø | ø | ø | Latin small letter o with stroke | |
249 | ù | ù | ù | Latin small letter u with grave | |
250 | ú | ú | ú | Latin small letter u with acute | |
251 | û | û | û | Latin small letter with circumflex | |
252 | ü | ü | ü | Latin small letter u with diaeresis | |
253 | ý | ý | ý | Latin small letter y with acute | |
254 | þ | þ | þ | Latin small letter thorn | |
255 | ÿ | ÿ | ÿ | Latin small letter y with diaeresis |
Набор символов ASCII
ASCII использует значения от 0 до 31 (и 127) для управляющих символов.
ASCII использует значения от 32 до 126 для букв, цифр и символов.
ASCII не использует значения от 128 до 255.
Набор символов ANSI (Windows-1252)
ANSI идентичен ASCII для значений от 0 до 127.
ANSI имеет собственный набор символов для значений от 128 до 159.
ANSI идентичен UTF-8 для значений от 160 до 255.
Кодировка ISO-8859-1
8859-1 идентичен ASCII для значений от 0 до 127.
8859-1 не использует значения от 128 до 159.
8859-1 идентичен UTF-8 для значений от 160 до 255.
Кодировка UTF-8
UTF-8 идентичен ASCII для значений от 0 до 127.
UTF-8 не использует значения от 128 до 159.
UTF-8 идентичен ANSI и 8859-1 для значений от 160 до 255.
UTF-8 продолжается от значения 256 с более чем 10 000 различных символов.
Для более пристального взгляда, изучите наш полный набор символов HTML.
❮ Назад Дальше ❯
Internet Explorer использует неправильный набор символов для HTML-страницы — Browsers
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
Предупреждение
Устаревшее и не поддерживаемое классическое приложение Internet Explorer 11 было окончательно отключено с помощью обновления Microsoft Edge в некоторых версиях Windows 10. Дополнительные сведения см. в статье Часто задаваемые вопросы о прекращении использования классических приложений Internet Explorer 11.
В этой статье приведены методы для решения проблемы, из-за чего Internet Explorer отрисовывает HTML-страницу с помощью неправильного набора символов.
Исходная версия продукта: Internet Explorer
Исходный номер базы знаний: 928847
Симптомы
Когда Microsoft Internet Explorer отрисовывает HTML-страницу, он использует неправильный набор символов. Internet Explorer делает это, даже если правильный набор символов указан тегом META
на HTML-странице.
Например, Internet Explorer может отрисовывать страницу HTML на японском языке с помощью набора символов SHIFT-JIS, даже если UTF-8 указан с помощью следующего META
тега на HTML-странице:
<META http-equiv=Content-Type content="text/html; charset=utf-8">
Причина
Эта проблема может возникнуть при выполнении одного или нескольких или следующих условий:
- Параметр Автовыбор включен в Internet Explorer.
Этот параметр помогает Internet Explorer определить кодовую страницу, используемую для HTML-страницы.
- Параметр «Системный языковой стандарт» отличается от набора символов, указанного в теге
META
. - Тег
META
, указывающий набор символов, не находится в первом блоке HTML-данных, проанализированных MSHTML. Как правило, это означает, что тег находится где-то после первых 256 байт данных в оставшейся части первых 4 КБ данных. - Сервер является медленной системой, или сервер разрывает первую часть HTTP-ответа, чтобы ответ не содержал
META
тег. Эта проблема может возникнуть, если включить фрагментированную кодировку. - Когда Internet Explorer передает исходный блок для анализа методу
IMultiLanguage::ConvertStringToUnicode
, Internet Explorer не может выполнить преобразование.
Примечание.
Существуют дополнительные условия, которые могут способствовать возникновению этой проблемы. Эти дополнительные условия очень зависят от кода и не перечислены здесь.
Решение
Для решения этой проблемы воспользуйтесь одним из указанных ниже способов.
- Отключите параметр Автовыбор в Internet Explorer.
- Укажите набор символов в заголовках HTTP.
- Переместите тег в
META
первый килобайт данных, проанализированных MSHTML. Хотя мы не знаем, сколько данных синтаксический анализатор считывает за раз, это расположение позволит устранить проблему. - Увеличьте размер начального HTTP-ответа сервера. Начальный размер должен быть не менее 1 КБ.
- Убедитесь, что параметр Системный языковой стандарт соответствует набору символов тега
META
, указанного на HTML-странице.
Узнайте, как использовать метакодировку
TL;DR. Указание правильной кодировки HTML предотвратит сбой отображения в браузере специальных символов.
Содержание
- 1. Понимание кодировки символов HTML
- 2. ASCII: самый простой набор символов
- 3. Лучший вариант: UTF-8
- 4. Альтернативные кодировки HTML
- Советы 08 Кодировка 08 Полезно 5.
Понимание кодировки символов HTML
Необходимость 9Кодировка 0022 символов возникает из-за огромного выбора доступных символов. Помимо привычных вам латинских букв и арабских цифр, есть также иностранные алфавиты, математические символы и другие специальные символы. Однако документы, для которых определены разные кодировки HTML, могут отображать их по-разному.
Неправильно интерпретированный текст приводит к ряду проблем:
- Пользователи не могут правильно прочитать текст
- Поисковые системы не могу найти данные
- Машины не могут обрабатывать информацию
Все доступные символы сгруппированы в определенные наборы (также называемые наборами символов для краткости). Определив кодировку HTML, вы позволите браузеру получить доступ к определенному набору и правильно отобразить его символы.
Примечание: у японцев даже есть специальный термин для плохо интерпретируемого набора символов — модзибаке (文字化け).
ASCII: самый простой набор символов
Первая и самая простая кодировка символов HTML называется ASCII . Большинство современных наборов символов используют его в качестве стандартной базы.
ASCII означает Американский стандартный код для обмена информацией. Он был разработан на основе телеграфного кода в начале 1960-х годов и содержит 128 символов , 95 из которых печатные :
- Строчные латинские буквы
- Прописные латинские буквы
- Знаки препинания
- Цифры от 0 до 9
33 непечатаемых символа также называются управляющими символами . Это прозрачные символы — например, те, которые позволяют разделять слова или абзацы.
Однако популярность ASCII падала по мере того, как Интернет становился все более и более международным . Только поддержки латинских символов быстро стало недостаточно.
Плюсы
- Простой дизайн (без лишней информации)
- Качественные курсы (даже бесплатные)
- Разнообразие функций
Основные характеристики
- Программы наностепеней
- Подходит для предприятий
- Платные сертификаты об окончании
ЭКСКЛЮЗИВ: 700 4 8 Плюсы
- Простота навигации
- Нет технические проблемы
- Кажется, заботятся о своих пользователях
Основные характеристики
- Большое разнообразие курсов
- 30-дневная политика возврата
- Бесплатные сертификаты об окончании
ОТ 12,99$
Pros
- Удобный пользовательский интерфейс
- Предлагает качественный контент 907 10097 Очень прозрачные цены 90 Основные характеристики
- Бесплатные сертификаты завершение
- Ориентирован на навыки работы с данными
- Гибкий график обучения
- Он поддерживает многие языки .
- Полностью совместим с с ASCII.
- Изначально используется XML .
- Использует на меньше места на , чем другие кодировки Unicode.
- Правильное отображение ваших символов зависит не только от кодировки, но и от выбранного шрифта : не все из них имеют версии для каждого символа. Если выбранный вами шрифт не содержит нужного вам символа, он либо будет искать совпадения в других шрифтах , либо отобразит другой символ (например, вопросительный знак).
- Не забывайте, что вам также необходимо указать кодировку HTML при сохранении вашего документа.
- Переопределение пользователя ( например, пользователь выбрал кодировку из меню в своем браузере).
- Параметр «charset» HTTP в поле «Content-Type».
- Объявление META с атрибутом «http-equiv», установленным на «Content-Type», и значением, установленным для «charset».
- Атрибут charset установлен для элемента, обозначающего внешний ресурс.
- Неопределенный эвристический анализ.
- Переопределение пользователя.
- Параметр «charset» HTTP в поле «Content-Type».
- Знак порядка байтов перед любыми другими данными в самом HTML-документе.
- Объявление META с атрибутом «charset».
- Объявление META с атрибутом «http-equiv», установленным на «Content-Type», и значением, установленным для «charset».
- Неопределенный эвристический анализ.
- Нормализация данной строки кодировки символов в соответствии с правилами сопоставления псевдонимов кодировок, определенными в Техническом стандарте Unicode № 22.
- Переопределить некоторые проблемные кодировки, т. е. преднамеренно обрабатывать некоторые кодировки, как если бы они были разными кодировками. Наиболее распространенным переопределением является обработка
US-ASCII
иISO-8859-1
какWindows-1252
, но в этой таблице есть несколько других переопределений кодировки.Как отмечается в спецификации, «Требование рассматривать определенные кодировки как другие кодировки в соответствии с приведенной выше таблицей является умышленным нарушением спецификации модели символов W3C».
- Март 2006 г .: Декларация кодировки символов в Интернете, в частности, этот пост Лахлана Ханта, в котором изложены требования к «прокладыванию коровьих троп» распространенных ошибок авторов.
- , июнь 2007 г.: объявление внутренней кодировки символов, отбрасывание UTF-32, а также терминология UTF и BOM .
СКИДКА 75%
Ваш лучший вариант: UTF-8
Unicode — это отраслевой стандарт, используемый для единообразия кодировки символов. Он был опубликован в начале 1990-х и имеет несколько кодировок, таких как UTF-8, UTF-16 и UTF-32.
UTF-8 означает 8-битный формат преобразования Unicode, который с 2008 года считается самой популярной кодировкой символов HTML. К 2019 году более 90 процентов всех веб-сайтов используют UTF-8. Консорциум World Web также рекомендует использовать кодировку символов HTML по умолчанию.
Существует несколько веских причин для использования UTF-8:
Чтобы объявить UTF-8 в качестве предпочтительной кодировки символов HTML, вам потребуется использовать тег с атрибутом charset
и UTF-8
в качестве его значения:
Альтернативные кодировки HTML
Вы можете найти множество альтернативных кодировок в стандарте кодирования жизни, созданном рабочей группой веб-гипертекстовых приложений ( ЧТОРГ). Однако мы настоятельно рекомендуем вам использовать UTF-8, так как другие кодировки содержат меньший набор символов, что может вызвать проблемы при отображении вашего веб-сайта.
HTML-кодирование: полезные советы
Блог WHATWG — Дорога к HTML 5: кодировка символов
по Марк Пилигрим, Google в учебниках
Добро пожаловать в мою полурегулярную колонку «Дорога к HTML 5», где я попытаюсь объяснить некоторые новые элементы, атрибуты и другие функции в предстоящей спецификации HTML 5.
Особенностью дня является кодировка символов, в частности, как определить кодировку символов HTML-документа. Я никогда не был счастливее, чем когда пишу о кодировке символов. Но сначала, вот мое стандартное описание того, что такое кодировка символов:
Когда вы думаете о «тексте», вы, вероятно, думаете о «символах и символах, которые я вижу на экране моего компьютера». Но компьютеры не имеют дело с буквами и символами; они имеют дело с битами и байтами. Каждый фрагмент текста, который вы когда-либо видели на экране компьютера, на самом деле хранится в определенной кодировке символов . Существует множество различных кодировок символов, некоторые из которых оптимизированы для определенных языков, таких как русский, китайский или английский, а другие могут использоваться для нескольких языков. Грубо говоря, кодировка символов обеспечивает соответствие между тем, что вы видите на экране, и тем, что ваш компьютер фактически хранит в памяти и на диске.
На самом деле все сложнее. Многие символы являются общими для нескольких кодировок, но каждая кодировка может использовать другую последовательность байтов для фактического хранения этих символов в памяти или на диске. Таким образом, вы можете думать о кодировке символов как о своего рода ключе расшифровки текста. Всякий раз, когда кто-то дает вам последовательность байтов и утверждает, что это «текст», вам нужно знать, какую кодировку символов он использовал, чтобы вы могли декодировать байты в символы и отображать их (или обрабатывать их, или что-то еще).
— источник
И еще раз повторю свой стандартный набор справочных ссылок для тех из вас, кто ничего не знает о кодировке символов. Вы должны прочитать книгу Джоэла Спольски «Абсолютный минимум, который должен знать каждый разработчик программного обеспечения о Unicode и наборах символов (без оправданий!)» и «Символы против байтов» и все, что написано Мартином Дюрстом.
Я также должен отметить, что вы всегда должны указывать кодировку символов на каждой HTML-странице, которую вы обслуживаете . Отсутствие указания кодировки может привести к уязвимостям в системе безопасности.
Итак, как ваш браузер на самом деле определяет кодировку символов потока байтов, который отправляет веб-сервер? Если вы знакомы с заголовками HTTP, возможно, вы видели такой заголовок:
.
Content-Type: text/html; набор символов = "utf-8"
Вкратце, это говорит о том, что веб-сервер думает, что отправляет вам HTML-документ, и что он считает, что документ использует кодировку символов UTF-8
. К сожалению, во всем великолепии всемирной паутины очень немногие авторы фактически имеют контроль над своим HTTP-сервером. Подумайте о Blogger: контент предоставляется отдельными лицами, но серверы находятся в ведении Google. Таким образом, HTML 4 предоставил способ указать кодировку символов в самом HTML-документе. Вы, наверное, тоже это видели:
Вкратце это говорит о том, что веб-автор считает, что он создал HTML-документ, используя кодировку символов UTF-8
. Теперь вы можете легко представить себе ситуацию, когда оба сервера и предоставляют информацию о кодировании документа. Кроме того, они могут не совпадать (особенно если ими управляют разные люди). Так кто из них победит? Ну, есть порядок приоритета на случай, если документ подается с противоречивой информацией.
Вот что говорит HTML 4.01 о порядке приоритета для определения кодировки символов:
Вот что говорит об этом HTML 5. Я не буду цитировать все это здесь, достаточно сказать, что это 7-шаговый алгоритм; шаг 4 имеет 2 подэтапа, первый из которых имеет 7 ветвей, один из которых имеет 8 подэтапов, один из которых фактически связан с отдельным алгоритмом, который сам состоит из 7 шагов. .. Так продолжается некоторое время . Суть в том, что
…а потом…
Две вещи должны бросаться в глаза здесь. Во-первых, WTF — это атрибут
? Ну, это именно то, на что это похоже. Выглядит так:
<метакодировка=UTF-8>
Мне удалось найти лишь разрозненные обсуждения этого атрибута в списке рассылки WHATWG.
Лучшее объяснение нового атрибута
было дано несколько месяцев спустя в несвязанной ветке в отдельном списке рассылки. Эндрю Сидвелл объясняет:
Обоснование комбинации атрибутов
заключается в том, что ПА уже реализуют ее, потому что люди склонны оставлять вещи без кавычек, например:
(Есть даже несколько
тестовых примеров, если вы не верите, что браузеры уже делают это.)
Во-вторых, кто, черт возьми, думает, что WHATWG указывает на «умышленное нарушение спецификации модели персонажей W3C»‽ Это справедливый вопрос. Как и в случае со многими подобными вопросами, ответ заключается в том, что HTML 5 лишь кодифицирует то, что уже делают браузеры. ИСО-8859-1 и Windows-1252 очень похожие кодировки. Единственное, чем они отличаются, — это так называемые «умные кавычки» и «фигурные апострофы» — довольно маленькие типографские завитки, которые любят авторы и которые Microsoft Word (и многие другие редакторы) выводят по умолчанию.