Saya mendapatkan kesalahan dengan derai berikut:
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 155: ordinal not in range(128)
Tidak yakin apa u'\ufeff'
itu, itu muncul ketika saya sedang menggores web. Bagaimana saya bisa memperbaiki situasi? The .replace()
Metode string tidak bekerja di dalamnya.
Jawaban:
Karakter Unicode
U+FEFF
adalah tanda urutan byte, atau BOM, dan digunakan untuk memberi tahu perbedaan antara pengkodean UTF-16 big dan endian. Jika Anda mendekode halaman web menggunakan codec yang tepat, Python akan menghapusnya untuk Anda. Contoh:Perhatikan bahwa
EF BB BF
BOM yang dikodekan UTF-8. Ini tidak diperlukan untuk UTF-8, tetapi hanya berfungsi sebagai tanda tangan (biasanya pada Windows).Keluaran:
Perhatikan bahwa
utf-16
codec membutuhkan BOM untuk hadir, atau Python tidak akan tahu apakah datanya besar atau kecil.sumber
Saya mengalami ini di Python 3 dan menemukan pertanyaan ini (dan solusi ). Saat membuka file, Python 3 mendukung kata kunci pengodean untuk secara otomatis menangani pengodean.
Tanpa itu, BOM dimasukkan dalam hasil baca:
Memberikan pengkodean yang benar, BOM dihilangkan dalam hasil:
Hanya 2 sen saya.
sumber
Karakter itu adalah BOM atau "Byte Order Mark". Biasanya diterima sebagai beberapa byte pertama dari suatu file, memberi tahu Anda bagaimana menafsirkan encoding dari sisa data. Anda cukup menghapus karakter untuk melanjutkan. Meskipun, karena kesalahan mengatakan Anda mencoba mengonversi ke 'ascii', Anda mungkin harus memilih penyandian lain untuk apa pun yang Anda coba lakukan.
sumber
Konten yang Anda garuk dikodekan dalam bentuk unicode daripada teks ascii, dan Anda mendapatkan karakter yang tidak dikonversi ke ascii. 'Terjemahan' yang tepat tergantung pada apa yang dipikirkan oleh halaman web asli. Halaman unicode Python memberikan latar belakang tentang cara kerjanya.
Apakah Anda mencoba mencetak hasilnya atau menempelkannya dalam file? Kesalahan menunjukkan bahwa itu menulis data yang menyebabkan masalah, bukan membacanya. Pertanyaan ini adalah tempat yang baik untuk mencari perbaikannya.
sumber
Berikut ini berdasarkan jawaban dari Mark Tolonen. String menyertakan berbagai bahasa dari kata 'test' yang dipisahkan oleh '|', sehingga Anda dapat melihat perbedaannya.
Berikut ini adalah uji coba:
Perlu diketahui bahwa hanya keduanya
utf-8-sig
danutf-16
mendapatkan kembali string asli setelah keduanyaencode
dandecode
.sumber
Masalah ini pada dasarnya muncul ketika Anda menyimpan kode python Anda dalam pengkodean UTF-8 atau UTF-16 karena python menambahkan beberapa karakter khusus di awal kode secara otomatis (yang tidak diperlihatkan oleh editor teks) untuk mengidentifikasi format pengkodean. Tetapi, ketika Anda mencoba mengeksekusi kode itu memberi Anda kesalahan sintaks pada baris 1 yaitu, mulai kode karena kompiler python memahami pengkodean ASCII . ketika Anda melihat kode file menggunakan fungsi read () Anda dapat melihat di awal kode yang dikembalikan '\ ufeff' ditampilkan. Satu solusi paling sederhana untuk masalah ini adalah hanya dengan mengubah pengkodean kembali ke pengkodean ASCII(untuk ini Anda dapat menyalin kode Anda ke notepad dan menyimpannya Ingat! pilih pengkodean ASCII ... Semoga ini bisa membantu.
sumber