У меня есть файл текс, который был создан из источника первого использования Сфинкса, она кодируется как UTF-8 без BOM (в соответствии с Notepad ++) и назван final_report.tex
, с следующим содержанием:Python line.replace возвращает UnicodeEncodeError
% Generated by Sphinx.
\documentclass[letterpaper,11pt,english]{sphinxmanual}
\usepackage[utf8]{inputenc}
\begin{document}
\chapter{Preface}
Krimson4 is a nice programming language.
Some umlauts äöüßÅö.
That is an “double quotation mark” problem.
Johnny’s apostrophe allows connecting multiple ports.
Components that include data that describe how they ellipsis …
Software interoperability – some dash – is not ok.
\end{document}
Теперь, прежде чем скомпилировать источник tex в pdf, я хочу заменить некоторые строки в тексте tex, чтобы получить более приятные результаты. Мой сценарий был вдохновлен another SO question.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
newFil=os.path.join("build", "latex", "final_report.tex-new")
oldFil=os.path.join("build", "latex", "final_report.tex")
def freplace(old, new):
with open(newFil, "wt", encoding="utf-8") as fout:
with open(oldFil, "rt", encoding="utf-8") as fin:
for line in fin:
print(line)
fout.write(line.replace(old, new))
os.remove(oldFil)
os.rename(newFil, oldFil)
freplace('\documentclass[letterpaper,11pt,english]{sphinxmanual}', '\documentclass[letterpaper, 11pt, english]{book}')
Это работает на Ubuntu 16.04 с Python 2.7, а также Python 3.5, , но он не на Windows, с Python 3.4. Сообщения об ошибке я получаю:
где 201c
стендов для левого знака двойных кавычек. Если я удаляю проблематичный характер, сценарий продолжается до тех пор, пока не найдет следующий проблемный символ.
В конце концов, мне нужно решение, которое работает на Linux и Windows с Python 2.7 и 3.x. Я пробовал довольно много решений, предложенных здесь на SO, но пока не может найти тот, который работает для меня ...
Привет @matth что делать вам есть в строке 19? –
В моем примере нет 19 строк, я предполагаю, что сообщение об ошибке относится к строке 19 файла 'cp850.py'. – matth
related: http://stackoverflow.com/questions/10971033/backporting-python-3-openencoding-utf-8-to-python-2 – matth