Node.JS → Выход Node.JS версии 0.6.3 и две ошибки, найденные при работе с кодировками дочерних процессов в консоли Windows XP
Я счёл это небезынтересным подарком ко дню рождения (по приятному совпадению, 25 ноября мне исполнилось 33 года). Однако в тот же день, задавшись вопросом «Как принять вывод
Во-первых, при вызове команды методом require('child_process').exec(…) Node ожидает от неё вывода в кодировке
Во-вторых, если дочерний консольный процесс изменит кодировку консоли, то будет воздействовать и на кодировку консоли родительского процесса Node (в частности, на вывод методом
А теперь немного подробностей.
Я пиарюсь → Исправление и изменение кодировок MySQL
В связи с тем, что довольно много людей обращается с просьбой помочь исправить проблему с кодировками MySQL, решил написать статью с описанием, как «лечить» наиболее часто встречающиеся случаи.В статье описывается не то, как первоначально правильно настроить кодировки MySQL (об этом уже довольно много написано), а о случаях, когда есть довольно большие таблицы с неправильными кодировками и нужно всё исправить.
Самое плохое в неправильно настроенных кодировках — то, что зачастую проблему сложно обнаружить, и с первого взгляда может казаться, что сайт работает правильно, и никаких проблем нет.
Веб-разработка → LXML — проблемы с кодировкой при парсинге HTML из песочницы
Данный пост посвящен извечной проблеме всех питонистов — кодировкам. Недавно я получил письмо, в котором мой знакомый жаловался на то, что у него в программе получаются строчки вида::
Вы заметили что что-то не так? И я вот. Строчки как бы уникодные, но внутри них закодированные utf-8 байты. Что-то здесь не так. Разбираясь дальше и потребовав скрипт, которые такое генерирует, становится понятно, что данные берутся из веба. Вполне обычным способом через
u'\xd0\x9a\xd1\x83\xd1\x80\xd1\x83\xd0\xbc\xd0\xbe\xd1\x87'Вы заметили что что-то не так? И я вот. Строчки как бы уникодные, но внутри них закодированные utf-8 байты. Что-то здесь не так. Разбираясь дальше и потребовав скрипт, которые такое генерирует, становится понятно, что данные берутся из веба. Вполне обычным способом через
urllib и потом скармливаются в lxml.html для разбора. Поскольку urllib оперирует только байтовыми строками, то он не мог их так превратить в уникод, а значит во всем виноват lxml.Блог компании Mail.Ru Group → Почта Mail.Ru (даже если ты китаец)
Хотим поделиться радостью: мы успешно перевели нашу почту на 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 бит в секунду. Кстати, те, кто покупал первые модемы, помнят, что скорость значилась именно в бодах – единицах измерения имени Эмиля Бодо, изобретателя кода и высокоскоростного телеграфного аппарата.
Как и многие серьезные изменения, процесс перехода потребовал серьезной подготовки и имел большую «подводную» часть – перед разработчиками стояла задача обработать 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 бит в секунду. Кстати, те, кто покупал первые модемы, помнят, что скорость значилась именно в бодах – единицах измерения имени Эмиля Бодо, изобретателя кода и высокоскоростного телеграфного аппарата.
JavaScript → Как отобразить страницу в UTF-8, несмотря на windows-1251 в HTTP-заголовке
Есть у меня старый сайт на Народ.Ру, и недавно я закинул туда несколько статей — как это я теперь делаю в UTF-8. Кодировка была указана в теге
Что делать? Переходить на другой хостинг? Само собой, но пока руки не дошли, хотелось добиться результата тут. Перекодировать тексты? Более достойным и интересным показалось поставить Javascript-«заплатку».
Способа переключить кодировку из Javascript я не нашёл. Остался вариант перекодировать текст скриптом, запускаемым по событию
Итак, браузер получает текст в UTF-8, разбивает UTF-последовательности на группы по 8 бит и трактует их как коды символов в кодировке Windows-1251. Чтобы восстановить читаемость текста, нужно получить эти коды, объединить их в UTF-последовательности, а из них — восстановить Unicode-коды символов и вернуть последние посредством числовых ссылок HTML на символы. В этом деле обнаружились несколько закавык.
meta, но, взглянув на страницы, я увидел крякозябры: «Р§С‚Рѕ-то случилось.» Оказывается, Народ.Ру шлёт HTTP-заголовок Content-Type: text/html; charset=windows-1251 и это на нём никак не отключается. Пользователь может получить читабельный текст — только если догадается вручную переключить кодировку в браузере.Что делать? Переходить на другой хостинг? Само собой, но пока руки не дошли, хотелось добиться результата тут. Перекодировать тексты? Более достойным и интересным показалось поставить Javascript-«заплатку».
Способа переключить кодировку из Javascript я не нашёл. Остался вариант перекодировать текст скриптом, запускаемым по событию
onready документа.Итак, браузер получает текст в UTF-8, разбивает UTF-последовательности на группы по 8 бит и трактует их как коды символов в кодировке Windows-1251. Чтобы восстановить читаемость текста, нужно получить эти коды, объединить их в UTF-последовательности, а из них — восстановить Unicode-коды символов и вернуть последние посредством числовых ссылок HTML на символы. В этом деле обнаружились несколько закавык.
PHP → UTF-8 в PHP. Часть 1
Здравствуйте, этим постом я хотел бы попытаться приблизить светлое будущее, в котором все используют «кошерную» кодировку UTF-8. В частности это касается наиболее близкой мне среды – веба и языка программирования – PHP, а в конце серии мы подойдём к практической части и разработаем ещё одну велосипедную библиотеку.
Типографика → Как выглядит арабская клавиатура
В комментариях к блестящему топику «Как выглядит китайская клавиатура» высказали интересную идею: рассказать про набор текста в разных языках с необычной письменностью.
Арабам относительно повезло: у них лишь 28 букв — даже меньше, чем в русском. Каждой букве можно назначить отдельную клавишу, и ещё останутся свободные. Зато с их письменностью возникают свои сложности, неведомые китайцам.
Арабам относительно повезло: у них лишь 28 букв — даже меньше, чем в русском. Каждой букве можно назначить отдельную клавишу, и ещё останутся свободные. Зато с их письменностью возникают свои сложности, неведомые китайцам.
Персональные блоги → PHP класс для конвертирования кодировки базы Mysql
Недавно я написал скрипт конвертирования Mysql базы из одной кодировки в другую. После, я решил переписать скрипт, создав класс. Теперь можно подключать эту библиотеку в своих скриптах. Использование данного класса показано ниже.
Персональные блоги → QIP. Убить нельзя помиловать.
Наверное хоть раз в жизни вам пришлось встретится с проблемой кодировок при общении в ICQ, сообщения приходят «крякозябрами» одному или обоим оппонентам. Приходится писать транслитом или переходить в другой клиент/протокол. Для меня лично общение по аське — часть работы и IM клиент — такой же инструмент как и IDE разработки. Наверное я не единственный кого подобные проблемы банально достали.
.NET → Решение проблемы с кодировками в Mono
Проблема.
В целом, эта проблема может по-разному проявляться. В моём случае это был SharpDevelop, напрочь отказавшийся компилировать Hello world, который в командной оболочке (в том числе, через NAnt) собирается без ошибок.