Питер Пайпер подключил программу на Python - и потерял все свои символы Unicode

У меня есть сценарий Python, который загружает веб-страницу с помощью urllib2.urlopen , творит различные волшебства и выплевывает результаты с использованием print . Затем мы запускаем программу в Windows следующим образом:

python program.py > output.htm

Вот проблема:

urlopen считывает данные с веб-сервера IIS, который выводит UTF8. Он выводит те же данные на вывод, однако некоторые символы (например, длинный дефис, который Word всегда вставляет за вас против вашей воли, потому что он умнее вас) искажаются и вместо этого заканчиваются как - .

При дальнейшем исследовании я заметил, что даже несмотря на то, что веб-сервер выдает данные UTF8, файл output.htm закодирован с помощью набора символов ISO-8859-1.

Мои вопросы:

  1. Когда вы перенаправляете программу Python в выходной файл в Windows, всегда ли она использует этот набор символов?
  2. Если да, то есть ли способ изменить это поведение?
  3. Если нет? , есть ли обходной путь? Полагаю, я мог бы просто передать output.htm в качестве параметра командной строки и записать в этот файл вместо экрана, но мне пришлось бы переделать целую кучу логики в моей программе.

Спасибо за любую помощь!

ОБНОВЛЕНИЕ:

Вверху 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, хотя это явно не так.

16
задан Mike Christensen 21 March 2013 в 16:14
поделиться