• Странное поведение pycharm?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Сейчас я проясню ситуацию=).
    Текст бывает либо в какой-то кодировке (cp1251, utf-8, win866, ascii, и т.д.), тогда это байты; либо в юникоде (это, как бы, абстрактное представление символов), тогда это строки из абстрактных юникодовых символов.
    Все файлы, потоки ввода-вывода и т.д. у нас в компьютере работает с байтами, а не с абстрактными юникодовыми символами. Это значит, что перед выводом в файл или консоль должно производиться кодирование юникода в конкретную кодировку.
    Кодировка -- это способ представить байтами абстрактных символов юникода. Каждый юникодовый символ, в зависимости от кодировки, будет задаваться одним или более байтом. Некоторые абстрактные символы не поддерживаются некоторыми кодировками.

    Так, например, кодировка ascii поддерживает только стандартные 128 символов и при попытке конвертировать в неё (явно или неявно) букву "Ж", будет такая же ошибка как у вас. Надо полагать метод parse в вашем случае возвращает юникод, а оператор print делает неявное преобразование в кодировку по умолчанию (ascii, судя по сообщению об ошибке).
    Осталось выяснить в каких случаях как определяется кодировка по умолчанию.
    Артём Клименко правильно предложил в своём ответе проверить что берётся в качестве кодировки по умолчанию в том и другом случае.
    Однако решением проблемы должно быть явное преобразование текста в нужную кодировку. Я в таких случаях придерживаюсь следующих правил:
    • Всё, что приходит в программу, привожу в юникод (если это не произошло неявно в той библиотеке, посредством которой я получил данные).
    • В программе работаю с текстом только в юникоде (если речь не идёт о каких-то низкоуровневых операциях над байтами, вроде парсинга протоколов и прочего.
    • Перед выводом конвертирую текст в нужную кодировку или настраиваю потоки вывода на автоматическое преобразование.
    • Когда не понятно в какой кодировке делать вывод, руководствуюсь следующими правилами:
      • Выходной поток -- это виндовый stdout и в нём не задана кодировка (bat-файлы, консоль) -- cp866
      • Файлы, БД и прочее, что поддерживает юникод и сделано правильно -- UTF-8
      • Когда в винде не помогают пердыдущие пункты -- cp1251
      • В других операционках utf-8.


    Подчеркиваю. Если выходной поток сконфигурирован на ascii, а у нас в программе могут попасться не-ascii символы, то нужно приводить текст в какую-то кодировку (см выше)), а иначе ничего не трогаем и пишем юникод.
    Ответ написан
    Комментировать
  • Как получить путь к значению JSON?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Вначале задайте себе вопрос, как вы доберетесь до "Blocker"?

    1. Вы преобразуете json в объект
    2. Вы обойдете этот объект каким-то алгоритмом поиска нужного значения.
    3. Вы найдете значение.

    Соответственно, чтобы получить "путь" до значения, вы должны сохранить его самостоятельно в переменную по мере поиска нужного значения.
    Ответ написан
    3 комментария
  • Yii2 Как сохранить кириллицу в базе?

    @zhainar Автор вопроса
    Гуглю за вас
    Уже нашел) В миграцию добавляем:
    $tableOptions = null;
    if ($this->db->driverName === 'mysql') {
                // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
         $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci';
    }
    $this->createTable(
    		'tablename', 
    		[
    			'id' => $this->primaryKey(),
    			//
    		], 
    		$tableOptions
    	);
    Ответ написан
    Комментировать
  • Как сделать доступным сайт со всех ethernet интерфейсов в vestacp?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    в общем случае - никак
    это же ДНС, у домена - только одна A запись
    да, делают round robin при больших нагрузках, но в панели этого не сделаешь, не тот уровень задачи

    делай так:
    1) пили nginx чтобы слушал два интерфейса
    2) в hosts прописывай ИП-локалки - домен, тогда из локалки будешь коннектиться по второму интерфейсу
    Ответ написан
    1 комментарий
  • Правильно составить SQL запрос?

    Melkij
    @Melkij
    PostgreSQL DBA
    Выведите сгенерированный SQL-запрос, найдите в нём ошибку, перепишите код так, чтобы генерировался нужный вам запрос.
    Ответ написан
    1 комментарий
  • Почему выдаёт Can't register new client on Instagram developers page Instagram API?

    tibhar940
    @tibhar940 Автор вопроса
    Внимание, Ответ!

    Разрабы Instagram'a поленились добавить появляющееся предупреждение в окно регистрации.

    В моём случае, я пытался зарегистрировать Application name с недопустимым символом "-"
    Ответ написан
    Комментировать
  • Как при изменении select построить заново таблицу без перезагрузки страницы?

    Andrbez
    @Andrbez
    Procrastination
    1. При помощи Ajax отправить запрос серверу.
    api.jquery.com/jquery.ajax

    2. На стороне сервера сформировать список и отправить клиенту.

    3. После получения ответа на стороне клиента удалить имеющиеся элементы (все кроме первого, который содержит заголовок таблицы).
    api.jquery.com/remove

    4. Заполнить таблицу новыми строками.
    api.jquery.com/append
    api.jquery.com/add
    Ответ написан
    2 комментария
  • Как увеличить лимит запросов к API instagram?

    lks
    @lks
    FrontEnd Developer
    Если вы можете предложить пользователям авторизоваться на сайте через Instagram, у вас будут их токены, которые можно использовать вместо client_id.
    Ответ написан
    2 комментария
  • Есть ли одобие oninput в Jquery?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Мне нужно что-то вроде oninput

    Пффф...

    как отслеживать изменение текста в input даже если фокус с него не убирается

    Ну это же просто

    $(document).on('input', '[data-action="text"]', function () {
    	var $item = $(this),
    		value = $item.val();
    
    	// А тут творим магию...
    });


    Например, здесь я по событию input обрабатываю содержание. Только уникальные цифры от 1 до 5.
    Ответ написан
    7 комментариев
  • Как настроить FTP под ubuntu?

    merryjane
    @merryjane
    Системный администратор
    Как вариант proftpd.
    Установка:
    aptitude install proftpd
    Правка конфига:
    vim /etc/proftpd/proftpd.conf
      RequireValidShell  off
      AuthUserFile  /etc/proftpd/ftpd.passwd
      DefaultRoot                     ~

    Заходим в каталог /etc/proftpd и создаем нужных пользователей:
    ftpasswd --passwd --name=ftp_upload --home=/var/www/upload --shell=/sbin/nologin --uid=48 --gid=48
    где --name=ftp_upload - имя FTP-пользователя,
    --home=/var/www/upload - каталог куда будет доступ по ftp у данного пользователя,
    --shell=/sbin/nologin - отключаем ему шелл на всякий случай,
    --uid=48 --gid=48 - идентификаторы пользователя и его группы с правами которых будут заливаться файлы.

    Не забываем перезапустить сервис после правки конфига сервера.
    Ответ написан
    2 комментария
  • Как в стандартном классе php DateTime реализовать вывод месяцев на русском?

    miraage
    @miraage
    Старый прогер
    А не проще использовать setlocale() + strftime() ?
    Ответ написан
    Комментировать
  • Как в стандартном классе php DateTime реализовать вывод месяцев на русском?

    Satanpit
    @Satanpit
    Front-end developer
    Приводит именно Ваш формат к виду 1 января 2014 г. 15:30.
    function getRusDate($datetime) {
    		$yy = (int) substr($datetime,0,4);
    		$mm = (int) substr($datetime,5,2);
    		$dd = (int) substr($datetime,8,2);
    		
    		$hours = substr($datetime,11,5);
    		
    		$month =  array ('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
    		
    		return ($dd > 0 ? $dd . " " : '') . $month[$mm - 1]." ".$yy." г. " . $hours;
    	}
    Ответ написан
    Комментировать
  • Как в C удалить символы из stdout?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Удалить символы уже выведенные в stdout нельзя. Если вы имеете в виду надпись на консоли, которая меняется с OK на ERROR, то это делается просто перепечатыванием поверху. Например

    printf("OK"); fflush(stdout);
    printf("\b\bERROR"); fflush(stdout);

    Работает, разумеется, только для консольного устройства, при перенаправлении в файл там будет и OK и ERROR и команды перемещения курсора.
    Ответ написан
    6 комментариев
  • Fatal error: Cannot redeclare class в PHP. Как победить ошибку?

    С вероятностью 95%. Вы два раза подключаете один и тот же файл. Без всего вашего кода ошибку не найти.
    Ответ написан
    2 комментария
  • Редактор Objective C под Windows?

    Ocelot
    @Ocelot
    Могу порекомендовать HippoEdit. Всего перечисленного вами в нем нет, но есть:
    — подсветка синтаксиса (куча схем, + еще больше на форуме, + можно написать свою (все настройки лежат в XML))
    — автодополнение (также настраивается)
    — поддержка проектов (хорошая или нет — не знаю, лично не использовал)
    — подключение внешних инструментов (опять же, не использовал, ничего сказать не могу)
    Из минусов:
    — он платный (30 дней триал)
    — он конфликтует с PuntoSwitcher (может, уже исправили)
    Ответ написан
    1 комментарий