2016-11-09 11 views
6

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.

+1

Đầu tiên giải mã chuỗi, sau đó mã hóa lại thành 'utf-8'? –

+2

Bản sao có thể có của http://stackoverflow.com/questions/6539881/python-converting-from-iso-8859-1-latin1-to-utf-8 – user3030010

+0

http://stackoverflow.com/questions/14443760/python- converting-latin1-to-utf8 –

Trả lời

0

Tôi đã tìm thấy cách nửa phần trong điều này. Đây không phải là những gì bạn muốn/nhu cầu, nhưng có thể giúp đỡ người khác đi đúng hướng ...

# First read the file 
txt = open("file_name", "r", encoding="latin-1") # r = read, w = write & a = append 
items = txt.readlines() 
txt.close() 

# and write the changes to file 
output = open("file_name", "w", encoding="utf-8") 
for string_fin in items: 
    if "é" in string_fin: 
     string_fin = string_fin.replace("é", "é") 

    if "ë" in string_fin: 
     string_fin = string_fin.replace("ë", "ë") 

    # this works if not to much needs changing... 

    output.write(string_fin) 

output.close(); 

* ghi chú cho detection

0

Đối với python 3.6:

your_str = your_str.encode('utf-8').decode('latin-1') 
Các vấn đề liên quan