У меня есть Python script, который загружает веб-страницу с помощью urllib2.urlopen
, выполняет некоторые различные магии и выплевывает результаты с помощью print
. Затем мы запускаем программу на Windows следующим образом:
python program.py > output.htm
Здесь проблема:
urlopen
считывает данные с веб-сервера IIS, который выводит UTF8. Он выводит эти же данные на выход, но некоторые символы (например, длинный дефис, который Word всегда вставляет для вас против вашей воли, потому что он умнее вас) искажается и заканчивается, например, â€"
.
После дальнейшего изучения я заметил, что даже если веб-сервер выплевывает данные UTF8, файл output.htm
кодируется набором символов ISO-8859-1.
Мои вопросы:
- Когда вы перенаправляете программу Python в выходной файл в Windows, всегда ли используется этот набор символов?
- Если да, есть ли способ изменить это поведение?
- Если нет, есть ли обходной путь? Полагаю, я мог бы просто передать
output.htm
в качестве параметра командной строки и записать в этот файл вместо экрана, но мне пришлось бы переделать целую кучу логики в моей программе.
Спасибо за любую помощь!
UPDATE:
В верхней части output.htm
я добавил:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Однако это не имеет значения. Символы все еще искажены. Если я вручную переключусь на UTF-8 в Firefox, файл отобразится правильно. И IE, и FF считают, что этот файл является западным ISO, хотя это явно не так.