Вероятно, я совершенно не понимаю этого, так что вы можете взглянуть на примеры кода и рассказать, что мне делать, чтобы убедиться, что это будет работать?
Я пробовал это в Eclipse с Pydev.Я использую Python 2.6.6 (из-за некоторой библиотеки, которая не поддерживает Python 2.7).
Во-первых, без использования модуля кодеков
# -*- coding: utf-8 -*-
file1 = open("samoloty1.txt", "w")
file2 = open("samoloty2.txt", "w")
file3 = open("samoloty3.txt", "w")
file4 = open("samoloty4.txt", "w")
file5 = open("samoloty5.txt", "w")
file6 = open("samoloty6.txt", "w")
# I know that this is weird, but it shows that whatever i do, it not ruin anything...
print u"ą✈✈"
file1.write(u"ą✈✈")
print "ą✈✈"
file2.write("ą✈✈")
print "ą✈✈".decode("utf-8")
file3.write("ą✈✈".decode("utf-8"))
print "ą✈✈".encode("utf-8")
file4.write("ą✈✈".encode("utf-8"))
print u"ą✈✈".decode("utf-8")
file5.write(u"ą✈✈".decode("utf-8"))
print u"ą✈✈".encode("utf-8")
file6.write(u"ą✈✈".encode("utf-8"))
file1.close()
file2.close()
file3.close()
file4.close()
file5.close()
file6.close()
file1 = open("samoloty1.txt", "r")
file2 = open("samoloty2.txt", "r")
file3 = open("samoloty3.txt", "r")
file4 = open("samoloty4.txt", "r")
file5 = open("samoloty5.txt", "r")
file6 = open("samoloty6.txt", "r")
print file1.read()
print file2.read()
print file3.read()
print file4.read()
print file5.read()
print file6.read()
Каждый из этих отпечатков работает правильно, и я неНе получайте забавных символов.
Также я попробовал это: я удаляю все файлы, сделанные в предыдущем тесте, и меняю только те строки:
file1 = open("samoloty1.txt", "w")
на те:
file1 = codecs.open("samoloty1.txt", "w", encoding='utf-8')
и снова все работает ...
Кто-нибудь может привести примеры, что работает, а что нет?
Должен ли это быть отдельный вопрос? Я загружаю веб-страницы через:
content = urllib.urlopen(some_url).read()
ucontent = unicode(content, encoding) # i get encoding from headers
Это правильно и достаточно?Что мне делать дальше, чтобы сохранить его в файле utf-8?(Я спрашиваю, потому что, что бы я ни делал раньше, это просто работает ...)
** ОБНОВЛЕНИЕ **
Вероятно, все работает нормально, потому что PyDev (или просто Eclipse) имеет терминал, закодированный в UTF-8.Поэтому для тестов я использовал cmd из Windows 7 и получаю некоторые ошибки.Теперь все рушилось, как и ожидалось.: D Здесь я показываю, что я изменил, чтобы заставить его работать снова (и все эти изменения являются разумными для меня, и они согласны с тем, что я узнал в ответах и в документах по документации Python).
print u"ą✈✈".encode("utf-8") # added encode
file1.write(u"ą✈✈".encode("utf-8")) # added encode
print "ą✈✈"
file2.write("ą✈✈")
print "ą✈✈" # removed .decode("utf-8")
file3.write("ą✈✈") # removed .decode("utf-8"))
print "ą✈✈" # removed .encode("utf-8")
file4.write("ą✈✈") # removed .encode("utf-8"))
print u"ą✈✈".encode("utf-8") # changed from .decode("utf-8")
file5.write(u"ą✈✈".encode("utf-8")) # changed from .decode("utf-8")
print u"ą✈✈".encode("utf-8")
file6.write(u"ą✈✈".encode("utf-8"))
И, как кто-то сказал, когда я использую кодеки, мне не нужно каждый раз использовать encode () перед записью в файл.:) Вопрос в том, какой ответ следует пометить как правильный?