Mã của tôi trông giống như sau:Python3: Chuyển đổi Latin-1 sang UTF-8
for file in glob.iglob(os.path.join(dir, '*.txt')):
print(file)
with codecs.open(file,encoding='latin-1') as f:
infile = f.read()
with codecs.open('test.txt',mode='w',encoding='utf-8') as f:
f.write(infile)
Các tập tin tôi làm việc với được mã hóa trong Latin-1 (Tôi không thể mở chúng trong UTF-8 rõ ràng) . Nhưng tôi muốn viết các tập tin kết quả trong utf-8.
Nhưng điều này:
<Trans audio_filename="VALE_M11_070.MP3" xml:lang="español">
<Datos clave_texto=" VALE_M11_070" tipo_texto="entrevista_semidirigida">
<Corpus corpus="PRESEEA" subcorpus="ESESUMA" ciudad="Valencia" pais="España"/>
Thay vì trở thành này (trong gedit):
<Trans audio_filename="VALE_M11_070.MP3" xml:lang="espa뇃漀氀∀㸀ഀ㰀䐀愀琀`漀猀 挀氀愀瘀攀开琀攀砀琀漀㴀∀ 嘀䄀䰀䔀开䴀开 㜀
Nếu tôi in nó trên Terminal, nó xuất hiện bình thường.
Thậm chí khó hiểu hơn là những gì tôi nhận được khi tôi mở file kết quả với LibreOffice Writer:
<#T#r#a#n#s# (and so on)
Vì vậy, làm thế nào để đúng cách chuyển đổi một latin-1 chuỗi thành một chuỗi utf-8? Trong python2, thật dễ dàng, nhưng trong python3, nó có vẻ khó hiểu với tôi.
tôi đã cố gắng đã những trong các kết hợp khác nhau:
#infile = bytes(infile,'utf-8').decode('utf-8')
#infile = infile.encode('utf-8').decode('utf-8')
#infile = bytes(infile,'utf-8').decode('utf-8')
Nhưng bằng cách nào đó tôi luôn luôn kết thúc với kết quả kỳ lạ như vậy.
Cảm ơn trước!
Chỉnh sửa: Câu hỏi này khác với các câu hỏi được liên kết trong nhận xét vì nó liên quan đến Python 3, không phải Python 2.7.
Đầu tiên giải mã chuỗi, sau đó mã hóa lại thành 'utf-8'? –
Bản sao có thể có của http://stackoverflow.com/questions/6539881/python-converting-from-iso-8859-1-latin1-to-utf-8 – user3030010
http://stackoverflow.com/questions/14443760/python- converting-latin1-to-utf8 –