Правильное отображение шведских символов в командной строке Windows с помощью Python в Notepad++

Название объясняет это хорошо. Я настроил Notepad++ для открытия скрипта Python в командной строке, когда я нажимаю F8, но все шведские символы выглядят перепутанными при открытии в CMD, но прекрасно работают, например, в IDLE.

Этот простой пример кода:

#!/usr/bin/env python
#-*- coding: UTF-8 -*-
print "åäö"

Похоже на это.

Как вы можете видеть, выходные данные пакетного файла, который я использую для открытия Python в cmd ниже, показывают символы правильно, но не скрипт Python над ним. Как это исправить? Я просто хочу правильно отображать символы. Мне не обязательно использовать UTF-8.

Я открываю файл в cmd, используя этот метод.

Обновление: решено. В начало пакетного файла добавлена ​​строка «chcp 1252», а под ней — строка cls, чтобы удалить сообщение о том, какую кодировку символов он использует. Затем я использовал "# -- coding: cp1252 --" в сценарии Python и изменил шрифт в cmd на консоль Lucida. Это можно сделать, щелкнув значок cmd в правом верхнем углу окна cmd и зайдя в свойства.


person Alex    schedule 17.04.2010    source источник
comment
Используйте шестнадцатеричный редактор, чтобы проверить фактическую кодировку символов, отличных от ASCII, на диске. Если вы объявляете, что это UTF-8, когда это не так, ничего не будет работать.   -  person Donal Fellows    schedule 18.04.2010
comment
Алекс: Обратите внимание, что сейчас вы полностью отказались от использования Unicode. Если вашему сценарию требуется больше, чем небольшое количество символов, доступных в таких устаревших кодировках, вам не следует этого делать. Правильный способ — просто выводить Unicode так, как этого ожидает консоль, а именно UTF-16. Python имеет строковый тип Unicode для определенной цели. Злоупотребление неявно определенными кодовыми страницами/кодировками для типа байтовой строки приводит ко всевозможным странным вещам, как вы видите здесь.   -  person Joey    schedule 18.04.2010
comment
Хорошо, но как именно это делается? Просто добавить строку, добавить u перед строками или и то, и другое? Кроме того, если я прав, консоль Windows cmd содержит ошибки по сравнению с Linux, это правильно? Кажется, я не могу понять это правильно ни одним из вышеперечисленных методов, какой правильный?   -  person Alex    schedule 18.04.2010


Ответы (4)


Python обычно преобразует строки Unicode в кодировку консоли Windows. Обратите внимание, что для правильного использования Unicode вам нужны строки Unicode (например, u'string') и необходимо объявить кодировку, в которой сохранен файл, с помощью строки coding:.

Например, это (сохранено в UTF-8 как x.py в моей системе):

# coding: utf8
print u"åäö"

Производит это:

C:\>chcp
Active code page: 437

C:\>x
åäö

Вы сможете успешно печатать только те символы, которые поддерживаются активной кодовой страницей.

person Mark Tolonen    schedule 18.04.2010

Вы печатаете байты UTF-8, но ваша консоль не настроена на UTF-8. Либо напишите Unicode как UTF-16, либо установите кодовую страницу консоли на UTF-8.

print u"åäö"
person Ignacio Vazquez-Abrams    schedule 17.04.2010
comment
Просто напишите print åäö в окне cmd после запуска в нем python, а также напечатайте uåöä, но не сохраните файл. Файл содержит только печать uåäö и выдает ошибку. - person Alex; 18.04.2010
comment
Это потому, что Python REPL декодирует его, используя кодировку консоли, когда вы вводите его в консоль. - person Ignacio Vazquez-Abrams; 18.04.2010

У меня была такая же проблема, и я использовал cp1252

С:>chcp 1252

Это заставило консоль использовать кодировку 1252, а затем я запустил свою программу, которая с милосердием отображала шведские символы.

person AMKhan    schedule 15.08.2012

Установите кодировку: # -*- coding: ISO-8859-1 -*-

Это сработало для меня, и я перепробовал множество различных решений, чтобы заставить его работать с Visual Studio IDE для Python.

# -*- coding: ISO-8859-1 -*-
print ("åäö")
person Ogglas    schedule 31.07.2014