Saya membaca dan mem-parsing file Amazon XML dan ketika file XML menunjukkan ', ketika saya mencoba untuk mencetaknya saya mendapatkan kesalahan berikut:
'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128)
Dari apa yang saya baca secara online sejauh ini, kesalahan berasal dari fakta bahwa file XML ada dalam UTF-8, tetapi Python ingin menanganinya sebagai karakter yang dikodekan ASCII. Apakah ada cara sederhana untuk menghilangkan kesalahan dan meminta program saya mencetak XML saat dibaca?
unicode()
?Jawaban:
Kemungkinan, masalah Anda adalah Anda menguraikannya dengan baik, dan sekarang Anda mencoba mencetak konten XML dan Anda tidak bisa melakukannya karena ada beberapa karakter Unicode asing. Coba encode string unicode Anda sebagai ascii terlebih dahulu:
bagian 'abaikan' akan memberitahunya untuk melewati karakter tersebut. Dari dokumen python:
Anda mungkin ingin membaca artikel ini: http://www.joelonsoftware.com/articles/Unicode.html , yang menurut saya sangat berguna sebagai tutorial dasar tentang apa yang terjadi. Setelah membaca, Anda akan berhenti merasa seperti Anda hanya menebak-nebak perintah apa yang harus digunakan (atau setidaknya yang terjadi pada saya).
sumber
.encode('ascii', 'ignore')
kehilangan data secara tidak perlu meskipun lingkungan OP mungkin mendukung karakter non-ascii (kebanyakan kasus)Solusi yang lebih baik:
Jika Anda ingin membaca lebih lanjut tentang mengapa:
http://docs.plone.org/manage/troubleshooting/unicode.html#id1
sumber
u'\u2019
sudah Unicode.Jangan melakukan hardcode pengkodean karakter lingkungan Anda di dalam skrip Anda; cetak teks Unicode secara langsung sebagai gantinya:
Jika output Anda diarahkan ke file (atau pipa); Anda bisa menggunakan
PYTHONIOENCODING
envvar, untuk menentukan pengkodean karakter:Jika tidak,
python your_script.py
harus bekerja seperti - pengaturan lokal Anda digunakan untuk mengkodekan teks (pada POSIX cek:LC_ALL
,LC_CTYPE
,LANG
envvars - setLANG
ke utf-8 lokal jika diperlukan).Untuk mencetak Unicode di Windows, lihat jawaban ini yang menunjukkan cara mencetak Unicode ke konsol Windows, ke file, atau menggunakan IDLE .
sumber
Pos luar biasa: http://www.carlosble.com/2010/12/understanding-python-and-unicode/
sumber
Anda dapat menggunakan sesuatu dari formulir
yang akan mengubah bytestring berenkode UTF-8 menjadi string Unicode Python. Tetapi prosedur yang tepat untuk digunakan bergantung pada bagaimana Anda memuat dan mengurai file XML, misalnya jika Anda tidak pernah mengakses string XML secara langsung, Anda mungkin harus menggunakan objek dekoder dari
codecs
modul .sumber
'...'.encode('utf-8')
Saya menulis yang berikut ini untuk memperbaiki kutipan non-ascii gangguan dan memaksa konversi ke sesuatu yang dapat digunakan.
sumber
Jika Anda perlu mencetak representasi perkiraan dari string ke layar, daripada mengabaikan karakter yang tidak dapat dicetak itu, coba
unidecode
paket di sini:https://pypi.python.org/pypi/Unidecode
Penjelasannya ditemukan di sini:
https://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/
Ini lebih baik daripada menggunakan
u.encode('ascii', 'ignore')
untuk string tertentuu
, dan dapat menyelamatkan Anda dari sakit kepala yang tidak perlu jika presisi karakter bukanlah yang Anda cari, tetapi tetap ingin memiliki keterbacaan manusia.Wirawan
sumber
Coba tambahkan baris berikut di bagian atas skrip python Anda.
sumber
Python 3.5, 2018
Jika Anda tidak tahu apa yang dienkode tetapi pengurai unicode mengalami masalah, Anda dapat membuka file di
Notepad++
dan di pilih bilah atasEncoding->Convert to ANSI
. Kemudian Anda bisa menulis python Anda seperti inisumber