У меня есть скрипт на Python, который загружает веб-страницу с помощью urllib2.urlopen
, совершает различные магические действия и выплевывает результаты с помощью print
.Затем мы запускаем программу в Windows следующим образом:
python program.py > output.htm
Вот проблема:
urlopen
читает данные с веб-сервера IIS, который выводит UTF8.Он выводит эти же данные на вывод, однако некоторые символы (такие как длинный дефис, который Word всегда вставляет для вас против вашей воли, потому что он умнее вас) искажаются и в итоге вместо этого выглядят как –
.
При дальнейшем исследовании я заметил, что хотя веб-сервер выдает данные UTF8, файл output.htm
кодируется набором символов ISO-8859-1.
Мои вопросы:
- Когда вы перенаправляете программу Python в выходной файл в Windows, всегда ли она использует этот набор символов?
- Если да, есть ли способ изменить это поведение?
- Если нет, есть ли обходной путь?Я полагаю, я мог бы просто передать
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, хотя это явно не так.