Искать  
 
   
 
UTF-8 vs cp1251
Отправлено: 25 Август 2008 10:13 P.M.   [ Игнорировать ]
Администратор
RankRankRankRank
Всего сообщений:  1354
Зарегистрирован  2008-01-02

статья на хабре, еще раз подтверждающая мою подпись smile

Идеологическая борьба между сторонниками cp1251 и utf8 длится уже давно. Сам не раз сталкивался с разногласиями между разработчиками по поводу того, какую кодировку использовать. Захотелось наконец расставить точки над “и”. Причем хочется все достаточно хорошо обосновать, чтобы не возникало сомнений в моей голословности.

Итак, почему же до сих пор большинство разработчиков используют сp1251(windows-1251)? Это связано с рядом причин.

Во-первых, большинство php-разработчиков до сих пор разрабатывают свои программы под ОС Windows(как ни странно), где cp1251 является стандартной кодировкой и ее поддерживают все текстовые редакторы. Лично я работаю под Linux, поэтому этой причины использования cp1251 мне не понять smile… Хотя, в windows уже даже стандартный блокнот поддерживает utf8 с таким же успехом, как и cp1251.

Во-вторых, исторически сложилось так, что старые версии MySQL (до 4й) — некорректно работали с utf8. Причем операции с сортировками глючили аж до версии 4.1. Поэтому очень много продуктов, которые развивались в течение многих лет до сих пор остаются на cp1251, а новички берут с них пример.

В-третьих, как мы знаем — один символ кириллицы в cp1251 занимает 1 байт, а в utf8 — 2 байта. Как ни странно, многих это пугает smile. Однако сомнения будут развеяны ниже.

Навскидку больше не смог найти причин использования cp1251.
А вот причины использовать utf8 даже искать не пришлось — они очевидны!

Во-первых, В кодировке UTF‑8 вы можете непосредственно включать в документ любые символы из всего набора Unicode. Старинные кодировки, такие как cp1251 или KOI8‑R (извинте, но они на самом деле уже старинные, ибо будущее за utf8 smile) предоставляли не более 256 символов, а в Unicode есть свыше 100 000 символов. Среди них — типографские знаки (тире, кавычки, многоточие, апостроф, неразрывный пробел, неразрывный дефис и пр.), специальные символы (№, §, ©, ‰, × и пр.), буквы с диакритическими знаками и лигатуры (é, è, Ü, Æ, ø, fi и пр.), символы почти всех существующих в мире алфавитов (α, Ω, א, ת,, 伲, 儻 и пр.), пиктограммы и значки (→, ■, ♥, ☺ и пр.) и множество других символов. Самое классное в этом всём это то, что все эти символы можно вставлять непосредственно в редакторе (из таблицы символов или с помощью горячих клавиш), что делает код куда более читабельным, нежели использование кракозяб вроде  π — или π (альтернативы в cp1251).

Во-вторых, хочется оспорить то, что страницы на utf8 имеют гораздо больший размер, чем на cp1251. Символы ASCII(латиница, арабские цифры, знаки препинания и т.д.) занимают в utf8 всего один байт, так же как и в cp1251. Таким образом при создании страниц на латинице никаких увеличений в размере страниц не наблюдается. С кириллицей — согласен. Если документ содержит только буквы русского алфавита и никаких других символов (что, согласитесь, бывает достаточно редко, ибо без html-тегов не сильно обойдешься smile) — то в 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 буквы что-то говорят? smile). И рекомендует он использовать для создания веб-страниц ни что иное, как utf8. Для тех, кто знает английский (а есть программисты, кто его не знает? smile) — можете почитать тут: http://www.w3.org/International/questions/qa-utf8-upgrade.en.php

Автор: Константин Юревич

 Подпись 

booooring…

Профиль