У меня есть некоторые документы, где …
показывался как …
и ê
показывался как ê
. Вот как это получилось (код python):
# Adam edits original file using windows-1252
windows = '\x85\xea'
# that is HORIZONTAL ELLIPSIS, LATIN SMALL LETTER E WITH CIRCUMFLEX
# Beth reads it correctly as windows-1252 and writes it as utf-8
utf8 = windows.decode("windows-1252").encode("utf-8")
print(utf8)
# Charlie reads it *incorrectly* as windows-1252 writes a twingled utf-8 version
twingled = utf8.decode("windows-1252").encode("utf-8")
print(twingled)
# detwingle by reading as utf-8 and writing as windows-1252 (it's really utf-8)
detwingled = twingled.decode("utf-8").encode("windows-1252")
assert utf8==detwingled
Чтобы исправить эту проблему, я использовал код python следующим образом:
with open("dirty.html","rb") as f:
dt = f.read()
ct = dt.decode("utf8").encode("windows-1252")
with open("clean.html","wb") as g:
g.write(ct)
(поскольку кто-то вставил twingled версии в правильный документ UTF-8, мне на самом деле пришлось извлечь только трясущуюся часть, подключить ее и вставить обратно. Для этого я использовал BeautifulSoup.)
Скорее всего, у вас есть Чарли в создании контента, чем неправильная конфигурация веб-сервера. Вы также можете заставить свой веб-браузер закрутить страницу, выбрав кодировку windows-1252 для документа utf-8. Ваш веб-браузер не может размещать документ, сохраненный Чарли.
Примечание: та же проблема может возникнуть с любой другой однобайтовой кодовой страницей (например, латинским-1), а не с окнами-1252.