Користуючись кодовою сторінкою windows тисячі двісті п'ятьдесят-одна таблиці кодування

          3 голоси

Привіт, шановні читачі мого блогу. Сьогодні ми поговоримо з вами про кодування. Якщо ви читали мою статтю про те, то знаєте, що будь-який документ в інтернеті зберігається не в тому вигляді, в якому ми звикли його бачити. Він записаний за допомогою незрозумілих людині символів і знаків. З текстом все одно.

Існує кілька кодувань, а тому, іноді побачивши незрозумілі символи при відкритті книги в мобільному додатку  або запив статтю на сайт, ви, помінявши деякі значення в настройках, побачите звичний оку алфавіт.


Кодування windows-1251 - що це таке, яке значення вона має при створенні сайту, які символи будуть доступні і чи є вона кращим рішенням  на сьогоднішній день? Про все це в сьогоднішній статті. Як завжди, простою мовою, максимально зрозуміло і з мінімальною кількістю термінів.

трохи теорії

Будь-який документ на комп'ютері або в інтернеті, як я вже сказав, зберігається у вигляді двійкового коду. Наприклад, якщо ви використовуєте кодування ASCII, То буква «К» буде записана як 10001010, а windows тисячі двісті п'ятьдесят один під цим числом ховається символ - С ™. У підсумку, якщо браузер або програма звернеться до іншої таблиці і вважає замість ASCII коди windows 1251, то читач побачить абсолютно незрозумілі йому символ.

Логічне запитання, нафіга було вигадувати безліч таблиць з кодами? Справа в тому, що крім російського алфавіту існує ще й англійську, німецьку, китайську. За деякими підрахунками, існує близько 200 000 символів. Хоча, я не дуже довіряю цій статистиці, згадуючи про японський.

Не забувайте, що для великої і малої літери потрібно придумати свій код, є коми, тире і так далі.

Чим більше в таблиці символів, тим довше код кожного з них, а значить і вага документа стає більше.


Уявіть, якби одна книга важила 4 Гб! Вона б дуже довго завантажувалася, займала все вільне місце на комп'ютері. Рішення про скачування уявлялося б справою нелегкою.

Якщо згадати про сайтах, то взагалі страшно подумати, що б сталося. Кожна сторінка відкривалася навіть на швидкісному оптоволокна годині з гаком! думаю, мобільні телефони  можна було б сміливо викидати. Користуватися ними на вулиці навіть з 4G? Сумніваюся.

З цих причин кожен програміст свого часу намагався придумати свою таблицю символів. Щоб було зручно для використання і вага зберігався оптимальним.

Microsoft, наприклад, для російськомовного сегмента створили windows-1251. У ній, звичайно ж, є свої переваги і недоліки. Як і у будь-якого іншого продукту.

Зараз вже, лише 2% всіх сторінок в інтернеті написано на 1251. Більшість веб-майстрів використовують UTF-8. Чому так?

Недоліки та гідності

UTF-8, на відміну від windows-1251 універсальна кодування, в ній містяться літери різних алфавітів. Існує навіть UTF-128, де є взагалі всі мови - Теуль, суахілі, лаоський, мальтійський і так далі.


UTF-8 бідніші, букви займають в рази менше місця і займають всього один байт пам'яті, як і в 1251. У УТФ є рідкісні символи з інших мов або спеціальні символи. Вони-то і важать по 5-6 байтів, але в документі використовуються вкрай рідко.

Це кодування більш продумана, а тому її використовує більшість додатків за замовчуванням. Тобто, якщо ви не вказуєте програмі, яке кодування ви використовуєте, то першим ділом він перевірить саме UTF-8.

Коли ви створюєте html документ для сайту, то вказуєте браузерам на яку таблицю їм звертати увагу при розшифровці записів.

Для цього необхідно вставити в тег head наступні дані. Після символів «charset =" йде або УТФ, або виндовс, як в прикладі нижче.

<meta http-equiv = "Content-Type" content = "Text / html; charset = windows-1251">


Якщо в подальшому ви захочете щось поміняти і вставити фразу албанською, використовуючи цю таблицю розшифровок, то нічого не вийде, адже цієї мови кодування не підтримує. UTF-8 без проблем дозволить вам це зробити.

Якщо вас зацікавило правильне створення сайту, то я можу порекомендувати вам курс Михайла Русакова « Створення та Розкрутка сайту від А до Я ».



Він містить в собі дуже багато - 256 уроків, які зачіпають, JavaScript, і XML. Крім мов програмування ви зможете зрозуміти як монетизувати сайт, тобто швидше і більше отримувати прибуток. Один з небагатьох курсів, в якому було б так детально роз'яснено все, що потрібно.

Сам я ось уже рік навчаюся в школі блогерів Олександра Борисова . Це займає в рази більше часу, кінця і краю поки не видно, але зате не менш вичерпно і дисциплінує. Мотивує продовжувати розробку.

Ну а якщо виникають питання, не потрібно шукати по інтернету. Завжди є грамотний наставник.



Щось я відійшов від теми. Давайте повернемося до кодувань.

бази банних

Коли мова йде про php, все взагалі страшно. Я вже розповідав про бази даних, вони використовуються для прискорення роботи сайту. Зазвичай, ви до них не звертаєтеся, але коли з'являється необхідність в перенесенні сайту стає не по собі.

Складнощі трапляються у всіх, байдуже якої у вас досвід роботи, стаж і вислуга років. Деякі сторінки в базі можуть містити в собі всі доступні символи для виндовс-1251, інші, наприклад, в шаблонах сторінок, в іншому кодуванні.

Поки не потрібен перенос все працює і функціонує, хоч і не зовсім правильно. Але після переїзду починаються неприємності. В ідеалі ви повинні використовувати або тільки УТФ, або виндовс-1251, але по факту завжди і у всіх трапляються ось такі недоліки.

Щоб розшифровка узгоджувалася необхідно вписати код mysql_query ( «SET NAMES cp1251»). В цьому випадку перетворення буде здійснювати по іншому протоколу - cp1251.


Htaccess

Якщо на сайті ви наполегливо вирішили використовувати саме 1251, то вам слід знайти або створити файл htaccess. Він відповідає за настройки конфігурації. У нього доведеться додати ще три рядки, щоб все зійшлося.

DefaultLanguage ru; AddDefaultCharset windows-1251; php_value default_charset "cp1251"

Я все ж настійно рекомендую вам задумати про використання UTF-8. Він популярніший, простий і багатий. Які б рішення ви не прийняли зараз, важливо, щоб згодом можна було все виправити. Додати англомовну версію сайту на цьому кодуванні буде в рази простіше. Нічого не потрібно виправляти.

Рішення залишається за вами. Підписуйтесь на розсилку, щоб дізнаватися якомога швидше, де вчитися, щоб не повторювати чужих помилок, а також які блогери отримують більше відвідувачів.

До нових зустрічей і удачі у ваших починаннях.

Днями довелося вирішувати невелику проблему з поганою сприйнятливістю комплекту Denwer до кодування UTF-8. Проблема, чесно кажучи, виявилася дріб'язкова, і була вирішена хвилин за 15, 10 з яких зайняло використання Гугла. У цьому час, досліджуючи різні форуми, я помітив, що для багато хто не може розібратися з цією проблемою досить довго. Крім того, зрозумів, що багатьох цікавить навіщо взагалі використовувати UTF-8, якщо є прекрасна така "російська" кодування Windows-1251. Ось і вирішив написати пару постів на цю тему. Почну я з загального опису даних кодувань, а продовжу, безпосередньо, описом вирішення проблеми використання UTF-8 на пакеті Denwer.

Не так давно, в зв'язку з обставинами, що склалися, вирішив відмовитися від кодування Windows-1251, з якої працював дуже давно, і цілком і повністю перейти на UTF-8. Всі причини переходу розкривати не буду, але основні з них:

  • більшість сучасних веб-платформ за замовчуванням працюють саме на ній;
  • її дуже зручно використовувати для створення багатомовних проектів;
  • набір використовуваних в кодування символів близько 100000;
  • кодування універсальна, тобто російські символи і в Нікарагуа залишаються росіянами.

трохи теорії

Windows-1251 - набір символів і кодування, що є стандартною 8-бітної кодуванням для всіх російських версій Microsoft Windows. Користується досить великою популярністю. Windows-1251 вигідно відрізняється від інших 8-бітних кириличних кодувань (таких як CP866, KOI8-R і ISO 8859-5) наявністю практично всіх символів, що використовуються в російській типографике для звичайного тексту; вона також містить всі символи для близьких до російської мови мов: української, білоруської, сербської та болгарського.

UTF-8 - в даний час поширена кодування, що реалізовує представлення Юнікоду, сумісне з 8-бітовим кодуванням тексту. Знайшла широке застосування в операційних системах  і веб-просторі. Текст, що складається тільки з символів Юнікоду з номерами менше 128, при записі в UTF-8 перетворюється в звичайний текст ASCII. Решта символів Юнікоду зображуються послідовностями довжиною від 2 до 6 байт.

Основні відмінності кодувань

Головна відмінність кодувань - це використовуваний набір символів. В UTF-8 набагато більше символів можна припустити, що в Windows- 1251. Кодування Windows- 1251 однобайтового, тобто уявити в ній можна тільки 255 символів. Для кирилиці, втім, цього цілком достатньо, саме тому однобайтові кодування досі так масово застосовуються.

Символ в кодуванні UTF-8 може кодуватися аж 6 байтами (поки використовується тільки 4 і більше не планується). Для російської мови, наприклад, символ займає 2 байта. Всі символи, які є в таблиці символів - підтримуються цієї кодуванням. Наприклад, якщо вам потрібен знак копірайту (©), то вам не потрібно шукати особливий шрифт або ж зображати символів в графічному форматі.

Плюси UTF-8:

  • UTF-8 дозволяє працювати одночасно з декількома мовами, тобто видавати тексти, в яких використовуються символи різних алфавітів і навіть ієрогліфи. З використанням кодування тисячі двісті п'ятьдесят одна це неможливо;
  • використання UTF-8 дозволяє відмовитися від кодових таблиць, Трансляцій символів і всіх інших збочень, що були раніше з однобайтового кодуваннями;
  • Немає купи кодувань для одного і того ж мови, як це було раніше для російського: cp1251, cp866, koi8r, iso8859-5.

Мінуси UTF-8 ...

А чи є вони у цій кодування взагалі? Я знаю тільки різних міфах і легендах на цю тему, ось деякі з них: "У UTF-8 є проблеми зі старими браузерами" - малоймовірно ... У всякому разі, якщо під старими не мають на увазі Lynx і Mosaic _); "З UTF-8 виникають проблеми на сервері" - ну да, якщо сервер за замовчуванням намагається визначити інше кодування. Але це не мінус кодування, вже точно ...

Перед творцем сайтів завжди встає проблема: в якому кодуванні створювати проект. У російськомовному інтернеті використовуються два кодування:

UTF-8  (Від англ. Unicode Transformation Format) - в даний час поширена кодування, що реалізовує представлення Юнікоду, сумісне з 8-бітовим кодуванням тексту.

Windows-1251  (або cp1251) - набір символів і кодування, що є стандартною 8-бітної кодуванням для всіх російських версій Microsoft Windows.

UTF-8 більш перспективна. Але у будь-якої речі є недоліки. І рішення про використання якоїсь кодування тільки тому, що вона перспективна, без урахування багатьох інших факторів, не представляється правильним. Вибір буде оптимальним тільки тоді, коли він повністю враховує всі нюанси конкретного проекту. Інша справа, що передбачити всі нюанси - саме по собі вельми не просто.

Ми вважаємо, що використання UTF-8 краще, але вирішувати що вибрати - це справа розробника проекту. А для полегшення цього вибору використовуйте порівняльну таблицю особливостей обох кодувань.

властивість UTF-8 Windows-1251
загального характеру
Багатомовність Кодування дозволяє використовувати різні мови як у публічній, так і в адміністративній частині сайту.
  • Зміна кодування чинного великого сайту з Windows-1251 на UTF-8 може викликати серйозні додаткові трудові та фінансові витрати.
  • Російська та англійська без проблем працюють з Windows-1251, якщо точно не буде потреби в інших мовах, то і немає потреби в UTF-8.
Велике число символів. Можливість використання спецсимволов. Є. Але треба враховувати можливості браузерів. Штатно немає. Є можливість заміни спецсимволов на "милиці", наприклад, © на & cорy; або × (знак множення) на & Timеs ;. Однак це підвищує вимоги до рівня підготовки контент-менеджера і створює проблеми при перенесенні даних з іншої бази даних. Крім того, в Bitrix Framework є поля, які не використовують візуальний редактор, наприклад, назва сторінки або назва елемента Інфоблоки. Це також ускладнює підтримку проекту силами низькокваліфікованих працівників.
Швидкість роботи
  • При роботі сайту йде підміна всіх функцій роботи з рядками на mb_ *. Це означає, що весь текст буде перекодувати в кодування сайту.
  • utf strlen  залежить від довжини рядка, відповідно звичайний strlen  працює в 3 рази швидше мультібайтового: 0.0004 проти 0.0013 на тисячі ітерацій. За вимірами на це виливається в 10-15% різницю в швидкості роботи реального сайту.
Мінімізація обсягу проекту. Проект на UTF-8 буде свідомо "важче", в силу того що рядки в цьому кодуванні займають в два рази більше місця, ніж рядки в однобайтном Windows-1251. Розмір сайту і бази даних буде в 1,2 - 1,5 разів більше.
Підтримка більшістю js-фреймворків Підтримується без проблем. Складнощі в реалізації.
підтримка MS SQL З технічних причин, дані в MS SQL  повинні зберігатися і зберігаються в Windows-1251. Потрібна додаткова настройка. Немає проблем.
імпорт CSV Excel  не зберігається в UTF-8. Потрібно пересохраненіе створеного файлу в цьому кодуванні за допомогою іншого редактора. Немає проблем.
Імпорт з 1С Сайти на UTF-8 працюють без проблем при інтеграції через SOAP  з такими системами як, наприклад, 1С.
Вебвізор Яндекс.Метрики Вебвізор коректно записує дії відвідувачів. Можливі помилки в запису.
Пов'язані з Bitrix Framework
Можливість зробити сайти в різній кодуванні по системі Многосайтовий. Неможливо. Всі сайти на одному ядрі повинні бути в одному кодуванні.
Підтримка на різних хостингах При роботі з Bitrix Framework необхідне підключення опції php mbstring.func_overload  в значенні більшому або рівному 2 . Це. Працює на будь-яких хостингах.
Розміщення продуктів на віртуальній машині BitrixVM. За замовчуванням. Вимагає додаткових дій з налаштування.
Коректне відображення пунктів меню сайту При використанні даного кодування така проблема можлива. Вирішується пересохраненіем кожного файлу в UTF-8. (Якщо бути точним, то рекомендується перевірити кодування всіх файлів, а не тільки файлів меню та, при необхідності, перекодувати і їх.)
Імпорт початкових кодів в IDE, наприклад, в eclipse pdt При виставленому в настройках проекту UTF-8, в коді ядра Bitrix Framework псуються коментарі. Немає проблем.
різні дрібниці
Взаємодія з WordPress  (Блог-клієнти, trackback та ping "і) є немає
Редагування файлів по FTP  через FAR FAR підтримує UTF тільки з версії 2.0. можливо
Підтримка більшістю редакторів Потрібно редактор, який підтримує кодування UTF-8 без BOM. Немає проблем.

Як перевести сайт з кодування win1251 в UTF-8

Загальний порядок дій:

    1. Перекодувати всю базу даних в UTF-8 (найімовірніше доведеться звертатися за допомогою до адміністратора сервера).

    2. Перекодувати всі файли сайту в UTF-8 (можна зробити своїми силами).

    3. У файл /bitrix/php_interface/dbconn.php додати рядки:

  define ( "BX_UTF", true);

4. У файл /.htaccess додати рядки:

Php_value mbstring.func_overload 2 php_value mbstring.internal_encoding UTF-8

Перекодувати всі файли сайту в UTF-8 (другий пункт) можна виконавши команду через SSH в кореневій папці сайту:

Find. -name "* .php" -type f -exec iconv -fcp1251 -tutf8 -o / tmp / tmp_file () \\; -exec mv / tmp / tmp_file () \\;

Кодування windows 1 251 була створена на початку 90 років для русифікації програмних продуктів, що випускаються корпорацією Microsoft:

Кодування є 8-бітної і включає в себе символи слов'янської групи мов, в яку входять російський, білоруський, український, болгарський, македонський, сербський - це дає перевагу перед іншими кириличними кодуваннями ( ISO 8859-5, KOI8-R, CP866). Однак у 1251-кодування є і вагомі недоліки:

  • 0xFF (25510) - це код, який зарезервований для символу «я». У програмах, які не підтримують чистий 8-ий біт, часто виникають непередбачувані проблеми;
  • Немає псевдографіки, яка присутня в KOI8, CP866.

Нижче наведені символи з Code Page 1251 або скорочено СР1251 ( числа під символами є кодом в шістнадцятковій системі такого ж символу в Юникоде):


Нерідко у web-розробників і блогерів, які мають різною кваліфікацією виникає проблема з кодуванням сторінок: замість підготовленого тексту з'являються невідомі, нечитабельним символи. Щоб розібратися з даною проблемою, необхідно розуміти суть терміна « кодування сторінки».

Текст в пам'яті комп'ютера зберігається у вигляді певної кількості байт, а не в тому вигляді, в якому він відображається в текстовому редакторі. Кожен байт є кодом, який відповідає одному символу. Для того щоб текст на сторінці відображався як слід, потрібно повідомити браузеру, яку таблицю кодів для розшифровки і відображення він повинен використовувати.

Таблиця кодувань не є універсальною, тобто, для розшифровки тексту необхідно використовувати ту, яка відповідає кодуванні символів:


Для того щоб html-документ коректно відобразився в браузері, необхідно вказати використовувану кодування. Робиться це в такий спосіб:

між тегом   і закриває його  потрібно прописати   - виходячи з цього рядка, браузер буде використовувати символи російського алфавіту для відображення тексту на сторінці.

Кодування windows 1251 до PHP

Ні для кого не є таємницею, що генерація сторінок проходить шляхом вибірки і використання якоїсь частини інформації, яка зберігається в базі даних. При написанні сайту на PHP, найчастіше це mysql.