записать в файл с Python 3 & Unicode - PullRequest
6 голосов
/ 11 февраля 2011

вот мой код:

import codecs
filename = "worst.txt"
file = open(filename, "r",encoding='utf-8')
lines = file.readlines()
texte = ""
for line in lines:
    print(line)
    texte += line
file.close()
print(texte)
texte = texte.split(";")
print(texte)
filename = "oudean.html"



file = open(filename, "w",encoding='utf-8')



file.write("<html><body>\r\n")
for t in texte :
        print(t)
        file.write("""<img src="ouedan.jpg"><br>\r\n""")
        file.write("""Une déclaration à faire ?<br>Besoin d'encouragements?<br>Notre brigade d'élite beat agent est là pour vous aider.<br>Faites appel à nous en appelant le  06 et nous accourrons vous encourager dans l'instant.<br>N hésitez pas.<br>Et pour vous aider durant cette soirée, voilà une accroche a tester, succès garanti :<br>%s<br><br><br><br><br><br><br><br>"""%t)
file.write("</body></html>\r\n")
file.close()

но я даю мне:

Une dé © claration â faire? Без поощрения? Нотрская бригада бьется агентом Est Lüpous Aider. Faites appell à nous en appelant le 06 et nous accourrons vous поощряющий dans l'instant. N hé sitez pas. Et vous aider aurant durant cette soirée, вуаля, знакомьтесь с тестером, гарантия успеха:

Так как записать в файл строку Юникод?

С уважением Bussiere

Ответы [ 2 ]

10 голосов
/ 12 февраля 2011

Ваши симптомы выглядят как обычная проблема "UTF-8 as latin-1".

Вы проверили, какая кодировка используется в программном обеспечении, которое вы используете для просмотра этого файла? Я бы сказал, что проблема не обязательно в вашем коде Python, но в программе просмотра.

Если вы создадите файл с примером текста Une déclaration à faire..., используя кодировку UTF-8, а затем прочитаете этот файл, интерпретируя содержимое, используя кодировку ISO-8859-1 или windows-1252, то результат будет показан как результат, который вы описали : Une déclaration à faire....

Кроме того, в python 3 исходной кодировкой по умолчанию является UTF-8. http://www.python.org/dev/peps/pep-3120/

0 голосов
/ 11 февраля 2011

Кажется, что python не понимает, в какой кодировке находится ваш источник. Вы должны сказать это, используя метку порядка байтов (предпочтительно) или объявив тип со специальным комментарием в первой или второй строке.Итак:

  1. попросите вашего редактора сохранить метку порядка следования байтов в источнике или, если он не может этого сделать,
  2. поместите комментарий в начале, содержащий (IIRC)encoding: utf-8.
...