Подтвердить что ты не робот

Какая разница между Windows-1252 (1/3/4) и ISO-8859-1?

Мы размещаем PHP-приложения на установке LAMP на базе Debian. Все в порядке - производительность, администрирование и управление. Однако, будучи несколько новыми разработчиками (мы все еще в старшей школе), мы столкнулись с некоторыми проблемами с кодировкой символов для западных кодировок.

После большого количества исследований я пришел к выводу, что информация в Интернете несколько запутанна. Это говорит о том, что Windows-1252 является ANSI и полностью совместим с ISO-8859-1.

Так или иначе, в чем разница между Windows-1252 (1/3/4) и ISO-8859-1? И где ANSI все равно вступает в это?

Какую кодировку мы должны использовать на наших серверах Debian (и на рабочих станциях), чтобы гарантировать, что клиенты получают всю информацию по-своему и что мы не теряем никаких символов на пути?

4b9b3361

Ответ 1

Я хотел бы ответить на это более схожим образом, чтобы ответить на него, поэтому нам нужна небольшая история. Джоэл Спольский написал очень хорошую ознакомительную статью абсолютный минимум, который должен знать каждый разработчик в кодировке символов Unicode. Потерпите меня здесь, потому что это будет как-то ответом looong.:)

Как история, я укажу на некоторые цитаты оттуда: (Большое спасибо Джоэлю!:))

Единственными символами, которые имели значение, были старые добрые английские буквы без акцента, и у нас был код для них под названием ASCII, который мог представлять каждый символ, используя число от 32 до 127. Пространство было 32, буква "A" составляла 65 и т.д. Это удобно хранить в 7 бит. Большинство компьютеров в те дни использовали 8-битные байты, поэтому не только вы могли хранить все возможные символы ASCII, но у вас было целая часть, чтобы избавиться, что, если бы вы были злы, вы могли использовать для своих собственных коварных целей.

И все было хорошо, если бы вы были английским оратором. Поскольку у байт есть место для до восьми бит, многие люди думают: "Черт, мы можем использовать коды 128-255 для наших собственных целей". Проблема заключалась в том, что у многих людей была эта идея одновременно, и у них были свои идеи о том, что должно происходить там, где в пространстве от 128 до 255.

Итак, теперь "OEM-наборы персонажей" были распространены с ПК, и все они были все разные и несовместимы. И нашему современному изумлению - все было в порядке! У них не было Интернета, и люди редко обменивались файлами между системами с разными локалями.

Джоэл продолжает говорить:

На самом деле, как только люди начали покупать ПК за пределами Америки, все идеи разных персональных наборов персонажей были задуманы, и все они использовали верхние 128 символов для своих целей. В конечном итоге этот OEM-производитель полностью кодифицирован в стандарте ANSI. В стандарте ANSI все согласились с тем, что делать ниже 128, что было почти таким же, как ASCII, но было много разных способов обработки символов от 128 и выше, в зависимости от того, где вы жили. Эти различные системы назывались кодовые страницы.

И вот, в конце концов, родились "страницы кодов Windows". На самом деле они были "родительскими" на кодовых страницах DOS. А потом появился Юникод!:) и UTF-8 - "еще одна система для хранения вашей строки кодовых точек Unicode", и на самом деле "каждая точка кода от 0 до 127 хранится в одном байте" и совпадает с ASCII. Я больше не буду вдаваться в подробности Unicode и UTF-8, но вы должны прочитать в спецификацию, Endianness и Кодировка символов как общий.

В связи с "заговором ANSI" Microsoft фактически допускает промаркировку Windows-1252 в глоссарий терминов:

Так называемый набор символов Windows (WinLatin1 или кодовая страница Windows 1252, если быть точным) использует некоторые из этих позиций для печатаемых символов. Таким образом, набор символов Windows НЕ идентичен ISO 8859-1. Набор символов Windows часто называют "набором символов ANSI", но это СЕРЬЕЗНО НЕПРАВИЛЬНО. Он НЕ был одобрен ANSI.

Таким образом, ANSI при обращении к наборам символов Windows не сертифицирован по ANSI!:)

Как указал Юкка (кредиты идут вам на приятный ответ)

Windows-1252 ISO Latin 1, также известный как ISO-8859-1 как кодировка символов, так что диапазон кода от 0x80 до 0x9F зарезервирован для управляющих символов в ISO-8859-1 (так называемые C1 Controls) В Windows-1252 некоторые из кодов назначаются печатным символам (в основном символам пунктуации), остальные - undefined.

Однако мое личное мнение и техническое понимание заключаются в том, что как Windows-1252, так и ISO-8859-1 НЕ ЯВЛЯЮТСЯ ВЕБ-ЭНЕРГИЯМИ!:) Итак:

  • Для веб-страниц используйте UTF-8 в качестве кодировки для содержимого Поэтому сохраните данные как UTF-8 и "выплюните" с помощью Заголовок HTTP: Content-Type: text/html; charset=utf-8.

    Существует также вещь, называемая метатег HTML-типа контента: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> Теперь, что браузеры действительно делают, когда сталкиваются с этим тегом, это то, что они начинаются с начала документа HTML снова, чтобы они могли переосмыслить документ в объявленной кодировке. Это должно произойти только в том случае, если заголовок Content-type отсутствует.

  • Используйте другие специальные кодировки, если пользователям вашей системы нужны файлы, созданные из нее. Например, некоторым западным пользователям могут потребоваться файлы сгенерированных Excel или CSV в Windows-1252. Если это так, закодируйте текст в этой локали, а затем сохраните его в fs и подайте в виде файла с возможностью загрузки.

  • В дизайне HTTP есть еще одна вещь: Механизм распределения содержимого должен работать следующим образом.

    я. Клиент запрашивает веб-страницу в определенных типах контента и кодировках через: "Accept" и "Accept-Charset" заголовки запросов.

    II. Затем сервер (или веб-приложение) возвращает содержимое, закодированное для этой кодировки и набора символов.

Это НЕ ДЕЛО в большинстве современных веб-приложений. Что на самом деле происходит, так это то, что веб-приложения служат (заставляют клиента) контент как UTF-8. И это работает, потому что браузеры интерпретируют полученные документы на основе заголовков ответов, а не на том, что они на самом деле ожидали.

Мы все должны пойти в Юникод, поэтому, пожалуйста, пожалуйста, используйте UTF-8, чтобы распространять ваш контент, где это возможно, и, самое главное, применимо. Или еще старейшины Интернета будут преследовать вас!:)

P.S. Еще несколько полезных статей об использовании символов MS Windows в веб-страницах можно найти здесь и .

Ответ 2

Наиболее авторитетной ссылкой на значения имен кодировки символов является реестр IANA Символьные наборы.

Windows-1252 широко известен как Windows Latin 1 или Windows West European или что-то в этом роде. Он отличается от ISO Latin 1, также известного как ISO-8859-1, как кодировка символов, так что диапазон кода от 0x80 до 0x9F зарезервирован для управляющих символов в ISO-8859-1 (так называемые C1 Controls), в Windows -1252, некоторые из кодов назначаются печатным символам (в основном символам пунктуации), остальные - undefined.

ANSI приходит сюда как неправильное имя. Microsoft представила Windows-1252 Американскому национальному институту стандартов (ANSI), который будет принят в качестве стандарта; предложение было отклонено, но Microsoft по-прежнему называет свой код "ANSI". Для дальнейшей путаницы они могут использовать "ANSI" для разных кодировок (в основном, "собственное 8-битное кодирование" установки Windows).

В контексте Интернета объявление ISO-8859-1 будет принято так, как если бы вы объявили Windows-1252. Причина в том, что элементы управления C1 не используются или не полезны в Интернете, в то время как добавленные символы часто используются даже на страницах, неправильно обозначенных как ISO-8859-1. Поэтому на практике не имеет значения, какой из них вы заявляете.

Все еще могут быть некоторые браузеры, которые фактически интерпретируют данные как ISO-8859-1, если они объявлены так, но они должны быть очень редкими (последнее, что я помню, это была версия Opera около десяти лет назад).

Вы не описываете, с какими проблемами столкнулись. Наиболее распространенной причиной проблем является то, что данные на самом деле кодируются UTF-8, но объявлены как ISO-8859-1 (или Windows-1252), или наоборот. Это становится реальной проблемой для авторов веб-страниц, если сервер заставляет заголовок Content-Type объявлять кодировку символов, и это тот, с которым они не могут справиться в своей среде разработки (или не знают, как это сделать).

Ответ 3

8859-1 и 1252

http://www.w3schools.com/charsets/ref_html_ansi.asp

ANSI (Windows-1252) ANSI был набором символов по умолчанию в Windows к Windows 95.

ANSI также называется Windows-1252.

Важное примечание. ANSI и ISO-8859-1 очень похожи. Они отличаются только в 32 символах.

В ANSI символы от 128 до 159 используются для некоторых полезных символы, такие как символ евро.

В ISO-8859-1 эти символы отображаются для управления символами, которые бесполезны в HTML.

__ поэтому предложение поэтому см., если 128 - символ евро.. если это ANSI/windows 1252. __

нажмите следующую ссылку, вы получите ссылку

http://www.w3schools.com/charsets/ref_html_8859.asp

Коды от 128 до 159 не используются в ISO-8859-1, но многие браузеры будут отображать символы из ANSI (Windows-1252) набор символов вместо ничего.

Эти 2 ссылки перечисляют их оба.

Ответ 4

В этой таблице приведен обзор различий. Он отображает все символы, которые определены в Windows-1252, но недоступны в ISO-8859-1/ISO-8859-15:

        │  …0  │  …1  │  …2  │  …3  │  …4  │  …5  │  …6  │  …7  │  …8  │  …9  │  …A  │  …B  │  …C  │  …D  │  …E  │  …F  │
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
     8… │   €  │      │   ‚  │   ƒ  │   „  │   …  │   †  │   ‡  │   ˆ  │   ‰  │   Š  │   ‹  │   Œ  │      │   Ž  │      │
Unicode │ 20AC │      │ 201A │ 0192 │ 201E │ 2026 │ 2020 │ 2021 │ 02C6 │ 2030 │ 0160 │ 2039 │ 0152 │      │ 017D │      │
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
     9… │      │  ‘   │   ’  │   "  │   "  │   •  │   –  │   —  │   ˜  │   ™  │   š  │   ›  │   œ  │      │   ž  │   Ÿ  │
Unicode │      │ 2018 │ 2019 │ 201C │ 201D │ 2022 │ 2013 │ 2014 │ 02DC │ 2122 │ 0161 │ 203A │ 0153 │      │ 017E │ 0178 │

В отличие от диапазона Windows-1252 0x80... 0x9F используется для Коды управления в ISO-8859-1.

В этой таблице показаны различия между Windows-1252, ISO-8859-1 и ISO-8859-15

Character    │    € │   Š │   š │   Ž │   ž │   Œ │   œ │   Ÿ │  ¤ │  ¦ │  ¨ │  ´ │  ¸ │  ¼ │  ½ │  ¾ │
───────────────────────────────────────────────────────────────────────────────────────────────────────
ISO 8859-1   │    – │   – │   – │   – │   – │   – │   – │   – │ A4 │ A6 │ A8 │ B4 │ B8 │ BC │ BD │ BE │
ISO 8859-15  │   A4 │  A6 │  A8 │  B4 │  B8 │  BC │  BD │  BE │  – │  – │  – │  – │  – │  – │  – │  – │
Windows-1252 │   80 │  8A │  9A │  8E │  9E │  8C │  9C │  9F │ A4 │ A6 │ A8 │ B4 │ B8 │ BC │ BD │ BE │
Unicode      │ 20AC │ 160 │ 161 │ 17D │ 17E │ 152 │ 153 │ 178 │ A4 │ A6 │ A8 │ B4 │ B8 │ BC │ BD │ BE │