Pull to refresh
VK
Building the Internet

Почта Mail.Ru (даже если ты китаец)

VK corporate blog
Хотим поделиться радостью: мы успешно перевели нашу почту на UTF-8. Теперь можно спокойно переписываться с арабами, китайцами, японцами, греками, грузинами, писать письма на иврите и идише, блеснуть знанием финикийской письменности или зашифровать послание нотами. И при этом быть уверенным, что адресат получит именно то, что ему отправили, а не квадратики или «кракозябры».

Как и многие серьезные изменения, процесс перехода потребовал серьезной подготовки и имел большую «подводную» часть – перед разработчиками стояла задача обработать 6 петабайт писем в более чем сотне миллионов ящиков. Первые эксперименты начались осенью 2010 года, и весной 2011 все ящики были успешно переведены на новую систему. Одновременно с этим символично сменился домен проекта «почта»: вместо основного домена win.mail.ru и исторических koi.mail.ru и mac.mail.ru, которые выдавали сайт в соответствующих кодировках, теперь используется e.mail.ru, выдающий все страницы в UTF-8. Вся почта также хранится, обрабатывается и выводится в UTF-8. Это означает, что в письмах можно использовать любые живые и мертвые языки, математические и нотные символы, причем как в виде plain-text, так и с форматированием.

Чтобы напомнить, как обстояли дела с международным общением еще недавно, мы подготовили небольшой экскурс в историю кодировок.

Вначале была цифра


Удивительно, но проблема кодировки сообщений, которая в восьмидесятых мучила первых сетевых пользователей, а в девяностых была бичом зарождающегося Рунета, возникла задолго до появления компьютера. Одним из самых первых ростков информационного века был телеграф, и сейчас нужно некоторое усилие, чтобы вспомнить, что способ связи, возникший еще до телефона, был изначально цифровым.

Не считая в чистом виде двоичной азбуки Морзе, первым кодом, превратившимся в стандарт, стал код Бодо. Этот 5-битный синхронный код позволял телеграфам передавать примерно 190 знаков в минуту (а в последствие до 760) или 16 бит в секунду. Кстати, те, кто покупал первые модемы, помнят, что скорость значилась именно в бодах – единицах измерения имени Эмиля Бодо, изобретателя кода и высокоскоростного телеграфного аппарата.

Кроме названия единицы скорости, код Бодо, а точнее стандарт ITA2, созданный на его основе, примечателен тем, что стал источником первой кириллической кодировки – телеграфного кода МТК-2. Для передачи русских букв в код добавился третий регистр (РУС в дополнение к ЛАТ и ЦИФ) и тут же начались ухищрения, вызванные необходимостью уложить наш 31-буквенный (на тот момент) алфавит в прокрустово ложе 5-битного стандарта, поскольку шесть позиций каждого регистра были заняты служебными символами. Например, широко известный любителям писать смс латиницей прием замены буквы Ч цифрой 4 был в середине XX века закреплен во всесоюзном стандарте. Еще одним интересным моментом, который всплывет уже в интернет-эпоху, стало соответствие кодов в разных регистрах по звучанию, а не по порядку букв (т.е., кириллическая последовательность АБВГД соответствовала латинской ABVGD, а не ABCDE).

Не все компьютерное одинаково полезно


Как только началась компьютерная эпоха, кодирование символов получило новую ветвь развития – двоично-десятичный код (BCD – binary-coded decimal). В далеком 1928 году разработчики компании довели до логического финала появившуюся еще в начале XIX века технологию записи информации на перфокартах. Серо-бежевые прямоугольники с 12 строками и 80 колонками помнит поголовно все старшее поколение научных сотрудников. Еще через тридцать лет, в конце 50-х, был введен сначала 6-битный код BCD, а вскоре и 8-битный EBCDIC.

С этого момента возникают две интересные тенденции: взрывной рост различных способов кодировки (существовало по меньшей мере шесть версий EBCDIC, несовместимых между собой) и конкуренция между «телеграфным» и «компьютерным» стандартами кодировки. Тогда же, в начале 60-х, а точнее в 1963 году, в Bell Laboratories на смену коду Бодо была разработана новая 7-битная кодировка ASCII. Важность этого события трудно переоценить – для Америки (и других англоговорящих стран) это раз и навсегда решило проблему стандартизации передачи данных (на тот момент по телетайпу).

Однако, решив проблему кодировки для себя, Штаты, умышленно или нет, создали ее для всех остальных стран, не говорящих на английском, и особенно для тех, кто пишет не латиницей. Для языков, которые отличались от английского только диакритикой (дополнительными штрихами над буквами), была открыта лазейка в виде символа BS – возврата на шаг. Он позволял печатать один символ поверх другого и получать из последовательности типа «a BS '» символ á. Для «национальных» символов были зарезервированы «открытые позиции» — целых десять штук.

Принципиальная «коммуникационность» кодировки, которая обусловила «экономию на битах» (считается, что идея полноценно 8-битной кодировки обсуждалась, но была отвергнута, как генерирующая излишний поток данных, удорожающий их передачу) обернулась спасением для тех, кому нужно было лишнее символьное пространство. На самом деле телетайпы позволяли пробивать на одной позиции восемь битов, и этот самый восьмой бит использовался для контроля четности. Именно его и задействовали разработчики национальных кодировок для хранения национальных символов, и в мировом варианте ASCII стала 8-битной кодировкой. И именно на этом восьмом бите кончалась жесткая стандартизация, которая делала ASCII такой удобной.

Вавилонское столпотворение


С распространением персональных компьютеров, локализованных операционных систем, а затем глобальной сети стало очевидно, что одной латиницей в кодировке не обойтись и разные производители принялись создавать множество национальных кодировок. На практике еще не так давно это означало, что получая письмо или открывая неудачную веб-страницу, вы рисковали увидеть «кракозябры» вместо текста, если ваш браузер не поддерживал нужную кодировку. И, как это часто бывает, каждый крупный производитель продвигал именно свой вариант, игнорируя конкурентов.

Причем у каждой кодировки были свои уникальные плюсы. Например, среди серверных систем и, что немаловажно, первых программ для работы с электронной почтой была наиболее распространена кодировка KOI-8. Она имела несколько весьма удачных структурных свойств, как это часто бывает с вещами, тесно связанными с UNIX. В частности, порядок следования русских букв был взят из телеграфного стандарта МТК-2, где сохранялось соответствие звучания, а не алфавитного порядка. Таким образом, при потере восьмого бита кириллический текст превращался в транслит, сохраняя при этом номинальную читаемость, т.е., «Привет, мир!» без старшего бита будет выглядеть как «pRIWET, MIR!». И обратите отдельное внимание на инверсию регистра, она не случайна, а использована специально, чтобы потеря бита была сразу заметна. Та же операция над знаменитой фразой, записанной кодировке WIN1251, главном конкуренте KOI-8, даст нечитаемое «Ophber, lhp!».

И раз уж мы заговорили о наследии телеграфа, нельзя не упомянуть о том, что, пожалуй, самой главной особенностью, делающей электронную почту виртуальным телеграфным аппаратом, является передача всех данных в 7-битном виде. Да, все стандарты передачи электронных писем так или иначе перекодируют и передают любые данные – текст, записанный не латиницей, изображения, видео – в виде чистого ASCII-текста. Наиболее известными способами транспортного кодирования стали Quoted-printable и Base64. В первом варианте латинские ASCII -символы не перекодируются, что делает сообщения с преобладанием латинских символов условно читаемыми. Однако для передачи данных больше подходит Base64, который и используется как основной способ транспортного кодирования и в наши дни.

Сколько звезд на небе и букв во всех языках мира


Но вернемся к вопросу о национальных алфавитах. В начале 90-х годов процессы глобализации взяли верх над тенденцией плодить сущности и несколько транснациональных корпораций, включая Apple, IBM и Microsoft объединились для создания универсальной кодировки. Организация была названа «Unicode Consortium» и результатом ее работы стал Unicode – способ представления символов практически всех мировых языков (включая язык математики – символы для формул, операций и т.д. – и нотную запись) в рамках единой системы.

Пропускная способность каналов связи значительно выросла со времен телеграфа и первых трансатлантических кабелей, поэтому на битах уже можно было не экономить, и приоритетом стала универсальность и расширяемость кодировки. То есть нужно было не только включить все существующие национальные языки и символы (включая иероглифы), но и предусмотреть запас на будущее. Поэтому в первой версии Unicode использовались символы фиксированного размера – 16 бит.

В таком виде стандарт позволял закодировать до 65 536 символов, этого с лихвой хватило для включения наиболее часто используемых символов, а для наиболее редких была предусмотрена «область пользовательских символов». И уже на первом этапе в стандарт были включены все наиболее известные кодировки, чтобы его можно было использовать как средство преобразования. Вышедшая в октябре 1991 версия Unicode 1.0.0 содержала, помимо привычных латинских символов и их модификаций, кириллицу, арабскую и греческую письменность, иврит, китайские и японские иероглифы, коптское и тибетское письмо. Впоследствии набор символов рос, хотя иногда языки удалялись, правда, лишь затем, чтобы позже вернуться на новое место (как, например, тибетская письменность и корейские иероглифы).

Однако разработчики довольно быстро решили «заложить» возможность еще более серьезного расширения и одновременно с этим отказаться от фиксированного размера символа. В результате стали использоваться символы переменной длины и различные способы представления кодовых значений. В 2001 году с версией 3.1 стандарт в действительности перешагнул 16-битный порог и стал насчитывать 94 205 кодов. В эту версию были добавлены знаки для записи европейской и византийской музыки, а также более 40 тысяч унифицированных китайско-японско-корейских иероглифов. С 2006 года можно публиковать веб-страницы с клинописью, с 2009 переписываться на ведическом санскрите, а с 2010 набирать гороскопы, не вставляя алхимические символы в виде картинок. В итоге на настоящий момент стандарт насчитывает 93 «языка» и задействует 109 449 кодов.

На данный момент стандарт Unicode имеет несколько форм представления, различающихся как структурой, так и областями применения, хотя последнее различие постепенно сглаживается. Наиболее популярной формой представления в глобальной сети и для передачи данных стала кодировка UTF-8. Это кодировка с переменной длинной символа – в теории от одного до шести байт, на практике – до четырех. Первые 128 позиций кодируются одним байтом и совпадают с символами ASCII для сохранения обратной совместимости – даже программы без поддержки стандарта будут правильно отображать латиницу и арабские цифры. Два байта используются для кодирования следующих 1920 символов, и в этой области располагаются латиница с диакритикой, греческий, кириллица, иврит арабская и сирийская письменность и некоторые другие. Практически все оставшиеся письменности, а также математические символы, кодируются тремя байтами, оставляя четырехбайтную запись для нот, вымерших языков и редких китайских иероглифов.

Сквозь тернии к мировому господству


Более 15 лет потребовалось даже такому универсальному стандарту как Unicode для выхода на прямую дорогу к сетевому господству. До сих пор еще не все сайты поддерживают Unicode – по данным Google только в 2010 году доля Unicode-страниц в глобальной сети приблизилась к 50%. Однако крупные провайдеры, услугами которых пользуется большое количество пользователей из разных стран, признали удобства стандарта. Та же технология применяется теперь и в Почте Mail.Ru.

Вместо послесловия


История развития кодировок наглядно показывает, что виртуальное пространство может удивительным образом наследовать границы и преграды реального мира. А внедрение и успех Unicode – насколько успешно можно эти преграды преодолевать. При этом, развитие новой технологии и успешное применение ее компаниями, деятельность которых определяет будущее информационного мира, настолько тесно связаны, что трудно определить, где причина, а где следствие. Зато легко увидеть, как постепенно было задействовано все больше и больше возможностей, заложенных в стандарт еще на стадии разработки. Это позволяет надеяться, что в информационном мире наибольший успех будут иметь проекты, с самого начала нацеленные в будущее, а не на извлечение сиюминутной выгоды или простейшее решение локальных проблем.

С уважением,
Сергей Мартынов
Руководитель Почты Mail.Ru
Tags:
Hubs:
Total votes 109: ↑79 and ↓30 +49
Views 19K
Comments Comments 125

Information

Founded
Location
Россия
Website
vk.com
Employees
5,001–10,000 employees
Registered
Representative
Миша Буданов