статья на хабре, еще раз подтверждающая мою подпись
Идеологическая борьба между сторонниками cp1251 и utf8 длится уже давно. Сам не раз сталкивался с разногласиями между разработчиками по поводу того, какую кодировку использовать. Захотелось наконец расставить точки над “и”. Причем хочется все достаточно хорошо обосновать, чтобы не возникало сомнений в моей голословности.
Итак, почему же до сих пор большинство разработчиков используют сp1251(windows-1251)? Это связано с рядом причин.
Во-первых, большинство php-разработчиков до сих пор разрабатывают свои программы под ОС Windows(как ни странно), где cp1251 является стандартной кодировкой и ее поддерживают все текстовые редакторы. Лично я работаю под Linux, поэтому этой причины использования cp1251 мне не понять … Хотя, в windows уже даже стандартный блокнот поддерживает utf8 с таким же успехом, как и cp1251.
Во-вторых, исторически сложилось так, что старые версии MySQL (до 4й) — некорректно работали с utf8. Причем операции с сортировками глючили аж до версии 4.1. Поэтому очень много продуктов, которые развивались в течение многих лет до сих пор остаются на cp1251, а новички берут с них пример.
В-третьих, как мы знаем — один символ кириллицы в cp1251 занимает 1 байт, а в utf8 — 2 байта. Как ни странно, многих это пугает . Однако сомнения будут развеяны ниже.
Навскидку больше не смог найти причин использования cp1251.
А вот причины использовать utf8 даже искать не пришлось — они очевидны!Во-первых, В кодировке UTF‑8 вы можете непосредственно включать в документ любые символы из всего набора Unicode. Старинные кодировки, такие как cp1251 или KOI8‑R (извинте, но они на самом деле уже старинные, ибо будущее за utf8 ) предоставляли не более 256 символов, а в Unicode есть свыше 100 000 символов. Среди них — типографские знаки (тире, кавычки, многоточие, апостроф, неразрывный пробел, неразрывный дефис и пр.), специальные символы (№, §, ©, ‰, × и пр.), буквы с диакритическими знаками и лигатуры (é, è, Ü, Æ, ø, fi и пр.), символы почти всех существующих в мире алфавитов (α, Ω, א, ת,, 伲, 儻 и пр.), пиктограммы и значки (→, ■, ♥, ☺ и пр.) и множество других символов. Самое классное в этом всём это то, что все эти символы можно вставлять непосредственно в редакторе (из таблицы символов или с помощью горячих клавиш), что делает код куда более читабельным, нежели использование кракозяб вроде π — или π (альтернативы в cp1251).
Во-вторых, хочется оспорить то, что страницы на utf8 имеют гораздо больший размер, чем на cp1251. Символы ASCII(латиница, арабские цифры, знаки препинания и т.д.) занимают в utf8 всего один байт, так же как и в cp1251. Таким образом при создании страниц на латинице никаких увеличений в размере страниц не наблюдается. С кириллицей — согласен. Если документ содержит только буквы русского алфавита и никаких других символов (что, согласитесь, бывает достаточно редко, ибо без html-тегов не сильно обойдешься ) — то в UTF‑8 он действительно станет в два раза больше. А если в нём, например, поровну русских и арабских букв — в UTF‑8 он будет в два раза меньше, чем, например, в cp1251. Чаще всего — основной вес страницы составляет не html-код, а всякого рода javascript, flash, картинки, css и т.д. Тем, кто заботится о «весе», следовало бы в первую очередь выкинуть из кода подстановки для тех символов, которым они не нужны, например, — для длинного тире или для неразрывного пробела (ой, как часто я вижу это в страницах новичков). Видим, что вместо 1 знака длинного тире мы пишем 6, вместо 1 знака неразрывного пробела мы пишем 5 знаков. И где же экономия? Действительно, иногда доходит до маразма — некто упирается: «Не буду делать страницы в UTF‑8, потому что они от этого увеличиваются» — а сам при этом ваяет код с жуткими атрибутами и подстановками, который без них мог бы быть в пять раз короче.
В-третьих, основное достоинство — это универсальность! Лично я не создаю свою CMS исключительно для русскоязычного сегмента рынка web-технологий. Благодаря utf-8 я могу создавать сайты без каких-либо переделок как для американцев, так и для немцев(с их буквочками вроде Ü), так и для арабов, так и для китайцев! И мне все равно, какой кодировка у них установлена, а какая нет, ибо Юникод у них установлен 100%.
В-четвертых, Юникод является стандартом для работы таких частоиспользуемых ныне фунций php, как json_encode/json_decode, а так же используемого в Ajax XHttpRequest. Причем, начиная с 6й версии PHP Юникод станет стандартом почти для всех строковых функций.
И напоследок, многие ссылаются на то, что люди постепенно переходят на utf8 потому, что “кто-то умный сказал, что это хорошо”. Соглашусь, кто-то умный это сказал уже давно, а именно — Консорциум W3C (кому-то эти 3 буквы что-то говорят? ). И рекомендует он использовать для создания веб-страниц ни что иное, как utf8. Для тех, кто знает английский (а есть программисты, кто его не знает? ) — можете почитать тут: http://www.w3.org/International/questions/qa-utf8-upgrade.en.php
Автор: Константин Юревич