System chcp 65001 что делает
Перейти к содержимому

System chcp 65001 что делает

  • автор:

Python-сообщество

[RSS Feed]

  • Начало
  • » 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++

Author24 — интернет-сервис помощи студентам

Привет.
Работаю над небольшим проектом,нужно работать со спецсимволами,таблицы 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 (иероглифы, кракозябры)

Настройка кодировки шрифтов в 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *