I/O Fail Unicode (UTF-8) dalam Python
Dalam Python, pengendalian teks Unicode dalam fail melibatkan operasi pengekodan dan penyahkodan. Walau bagaimanapun, memahami konsep ini boleh mencabar, seperti yang ditunjukkan oleh isu biasa:
Kekeliruan Penyahkodan:
Pertimbangkan kod berikut dalam Python 2.4:
<code class="python">ss = u'Capit\xe1n' ss8 = ss.encode('utf8') print(ss, ss8)</code>
Kod ini mengeluarkan:
Capit\xe1n b'Capit\xc3\xa1n'
Aksara a-acute (á) diwakili secara berbeza dalam Unicode (u'Capitxe1n') dan UTF-8 (ss8 = 'Capitxc3xa1n'). Apabila mencetak ss8, Python lalai kepada perwakilan ASCII, maka urutan xc3xa1n.
Membuka fail 'f1' dalam mod tulis dan menulis ss8 kepadanya menyebabkan 'Capitxc3xa1nn' ditulis pada fail. Sebaliknya, apabila menulis ss ke fail lain 'f2', Python cuba mentafsir aksara a-acute sebagai jujukan melarikan diri, menghasilkan 'Capitxc3xa1nn'.
Penyelesaian Penyahkodan:
Untuk menyelesaikan kekeliruan ini, nyatakan pengekodan secara eksplisit apabila membuka fail. Dalam Python 2.6 dan lebih baru, fungsi io.open boleh digunakan:
<code class="python">import io f = io.open("test", mode="r", encoding="utf-8")</code>
Pendekatan ini memastikan fail dibaca dan ditulis dalam UTF-8, menghapuskan keperluan untuk pengekodan dan penyahkodan manual. Dalam Python 3.x, fungsi io.open ialah alias untuk fungsi terbuka terbina dalam, yang turut menyokong hujah pengekodan.
Sebagai alternatif, modul codec boleh digunakan:
<code class="python">import codecs f = codecs.open("test", "r", "utf-8")</code>
Adalah penting untuk ambil perhatian bahawa mencampurkan kaedah read() dan readline() boleh menyebabkan masalah apabila menggunakancodecs.open.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membaca dan Menulis Fail Unicode (UTF-8) dengan Betul dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!