Python-сообщество
- Начало
- » Python для новичков
- » python 3.3 chcp 65001
#1 Июль 13, 2013 08:21:30
longimanus Зарегистрирован: 2013-07-13 Сообщения: 3 Репутация: 0 Профиль Отправить e-mail
python 3.3 chcp 65001
Написал программу на python 3.3 (первую на python!):
#-*- coding:utf-8 -*- import urllib.request import subprocess #import os #os.system("chcp 65001") subprocess.call("chcp 65001", shell=True) f = urllib.request.urlopen("http://www.relcom.ru/") a = f.read() print(a.decode('utf-8'))
Запускаю ее под win 7 (64) в консоли (cmd, powershell, от jpsoft), появляется ошибка:
PS C:\omni\python> python my.py
Active code page: 65001
Traceback (most recent call last):
File “my.py”, line 9, in
print(a.decode(‘utf-8’))
File “C:\Python33\lib\encodings\cp866.py”, line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)
UnicodeEncodeError: ‘charmap’ codec can’t encode character ‘\xab’ in position 4327: character maps to
PS C:\omni\python>
То есть, почему-то берется кодировка cp866, а не utf-8, хотя я вроде бы ее поменял с помощью chcp.
Когда запускаю этот же скрипт в этой же консоли повторно, то все выполняется как надо и на экран выводится код страницы relcom.ru :
PS C:\omni\python> python my.py
Active code page: 65001Компания Релком
…
Прописал в алиасах ‘cp65001’ : ‘utf_8’ — не помогает.
Как бы сделать так, чтобы все выводилось нормально с первого раза? В чем ошибка?
Отредактировано longimanus (Июль 13, 2013 08:32:00)
Вывод UTF-8 в cmd
В нижеприведённом коде в строку responseString приходит слово состоящее из кириллических символов в кодировке UTF-8. При выводе в cmd с кодовой страницей chcp 866, вместо нужного слова в консоли можно увидеть только ╨Ю╨╗╨╡╨│ . В чём здесь проблема? Подключен шрифт Lucida Console, а при смене кодовой страницы на 65001 никакие символы не выводятся. Если эту строку сразу же отправить в Гугл через cURL, то он без проблем поймёт что это за слово.
size_t WriteCallback(void *ptr, size_t size, size_t nmemb, string*userdata) < userdata->append((char *)ptr, size * nmemb); return size * nmemb; > int main() < string responseString; CURL *curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, "https://. "); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &responseString); system("chcp 866"); cout
Универсальный декодер без проблем смог определить исходную кодировку и само слово:
Отслеживать
avalanche_of_misery
задан 9 мая 2018 в 13:56
avalanche_of_misery avalanche_of_misery
85 10 10 бронзовых знаков
Как минимум, должно быть chcp 65001 (это собственно utf-8) и в настройках консоли должен быть включен ttf шрифт (Lucida Console, например). См. stackoverflow.com/questions/19955385/utf-8-in-windows-7-cmd
9 мая 2018 в 14:02
@insolor Lucida Console подключен, а при смене кодовой страницы на 65001 никакие символы не выводятся
9 мая 2018 в 14:05
Посмотрите этот ответ: stackoverflow.com/a/45622802/4752653
9 мая 2018 в 14:14
@insolor спасибо! В следующий раз учту, что лучше искать на англоговорящем stackoverflow) Может, стоит оформить ваш комментарий как ответ? Или оставить все как есть?
9 мая 2018 в 14:24
Я не искал специально на en stackoverflow, я искал в поисковике, просто по ключевым словам (c++ cout utf-8). (Придумайте кто-нибудь плагин для браузера, который с qaru редиректит сразу на en so). Можно опубликовать рабочий пример кода с комментариями со ссылкой на оригинальный ответ.
Работа с UTF-8 в консольном приложении C++
Привет.
Работаю над небольшим проектом,нужно работать со спецсимволами,таблицы ascii не хватает и я решил взяться за юникод.
Все чего прошу-поясните как выводить их(желательно через cout)
Гугл выдал немного инфы про wstring/wcout и боооольшущие библиотеки для использования юникода,в которых мне с моими знаниями пока не разобратся).
Для примера,чтобы полностью въехать прошу пример кода,который выводит в консоль один любой символ с кодировкой utf-8.
Заранее очень благодарен)))
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Unicode, UTF-8 и ANSI в одном консольном приложении. Можно ли "на лету" конвертировать массив строк?
Всем доброго дня) Подскажите такую весчь: можно ли в консольном приложении работать с.
Работа с файлами в консольном приложении
Пожалуйста подскажите как в Visual C++ 2008 работать с файлами в проекте консольного приложения?
Работа с русским языком в консольном приложении
Как можно осуществить ввод-вывод текста на русском языке в консоли? Просто я в программе.
Работа с изображением в консольном приложении
Доброго времени суток. Помогите разобраться в материале У меня по курсачу нужно работать с.
603 / 403 / 212
Регистрация: 30.04.2017
Сообщений: 743
Пример c linux/~nix(не уверен)
Этот пример не работает у меня под windows
С консолью windows сложнее. Изначально в консоли установлен шрифт и кодировка под ascii символы и их нужно менять. Беглый поиск дает эту , может один из вариантов вам поможет.
Добавлено через 8 минут
Если вам не нужны все символы UTF-8, а только спецсимволы такие как палки, крестовины и подобное можете менять ascii кодировки под консоль windows.
system("chcp 866") - 866, 1251 - их вроде как много
и это, естественно, не будет работать на linux/unix
Настройка кодировки шрифтов в cmd/bat (иероглифы, кракозябры)
В некоторых случаях, когда используется неверная кодировка, могут возникать так называемые кракозябры или иероглифы, т.е. не читаемые символы, которые невозможно разобрать при работе с командной строкой. Эти проблемы могут также возникать и при запуске различных BAT-файлов. В данной статье мы расскажем о том, как можно сменить шрифт или кодировку, чтобы избавиться от этой проблемы. Пример таких не читаемых символов можно видеть на картинке ниже:
Исправляем проблему с кодировкой с помощью смены шрифта
Первым делом нужно зайти в свойства окна: Правой кнопкой щелкнуть по верхней части окна -> Свойства -> в открывшемся окне в поле Шрифт выбрать Lucida Console и нажать кнопку ОК.
После этого не читаемые символы должны исчезнуть, а текст должен выводиться на русском языке.
Исправляем проблему с кодировкой с помощью смены кодировки
Вместо смены шрифта, можно сменить кодировку, которая используется при работе cmd.exe.
Узнать текущую кодировку можно введя в командной строке команду chcp , после ввода данной команды необходимо нажать Enter .
Как видно на скриншоте, текущая используемая кодировка Windows-1251
Для изменения кодировки нам необходимо воспользоваться командой chcp , где - это сам код кодировки, на которую мы хотим переключиться. Возможные значения:
- 1251 - Windows-кодировка (Кириллица);
- 866 - DOS-кодировка;
- 65001 - Кодировка UTF-8;
Т.е. для смены кодировки на DOS, команда примет следующий вид:
chcp 866
Для смены кодировки на UTF-8, команда примет следующий вид:
chcp 65001
Для смены кодировки на Windows-1251, команда примет следующий вид:
chcp 1251