Saya memiliki browser yang mengirim karakter utf-8 ke server Python saya, tetapi ketika saya mengambilnya dari string kueri, pengkodean yang dikembalikan Python adalah ASCII. Bagaimana saya bisa mengkonversi string polos ke utf-8?
CATATAN: String yang diteruskan dari web sudah dikodekan UTF-8, saya hanya ingin membuat Python untuk memperlakukannya sebagai UTF-8 bukan ASCII.
python
python-2.7
unicode
utf-8
Bin Chen
sumber
sumber
"some_string".encode('utf-8').decode('utf-8')
Jawaban:
^ Ini adalah perbedaan antara string byte (plain_string) dan string unicode.
^ Mengubah ke unicode dan menentukan pengkodean.
sumber
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 2: invalid start byte
Ini adalah kode saya: ret = [] untuk baris di csvReader: cline = [] untuk elm di baris: unicodestr = unicode (elm, 'utf-8') cline.append (unicodestr) ret .append (cline)unicode()
tidak ada.u
kembali kestr
format (konversiu
kembali kes
)?Jika metode di atas tidak berfungsi, Anda juga bisa memberi tahu Python untuk mengabaikan bagian dari string yang tidak dapat dikonversi ke utf-8:
sumber
Mungkin sedikit berlebihan, tetapi ketika saya bekerja dengan ascii dan unicode dalam file yang sama, mengulangi decode bisa menyebalkan, inilah yang saya gunakan:
sumber
Menambahkan baris berikut ke bagian atas file .py Anda:
memungkinkan Anda untuk menyandikan string secara langsung di skrip Anda, seperti ini:
sumber
from __future__ import unicode_literals
di bagian atas atau gunakanu''
awalan. Jangan gunakan karakter non-ascii dalambytes
literal. Untuk mendapatkan utf-8 byte, Anda bisautf8bytes = unicode_text.encode('utf-8')
nanti jika perlu.from __future__ import unicode_literals
membantu saya untuk mengkonversi string dengan karakter non-ascii ke utf-8?Jika saya mengerti Anda dengan benar, Anda memiliki byte-string yang dikodekan utf-8 dalam kode Anda.
Mengubah byte-string ke string unicode dikenal sebagai decoding (unicode -> byte-string sedang encoding).
Anda melakukannya dengan menggunakan fungsi unicode atau metode decode . Antara:
Atau:
sumber
sumber
Dalam Python 3.6, mereka tidak memiliki metode built-in unicode (). String sudah disimpan sebagai unicode secara default dan tidak diperlukan konversi. Contoh:
sumber
Terjemahkan dengan ord () dan unichar (). Setiap karakter unicode memiliki nomor yang terkait, seperti indeks. Jadi Python memiliki beberapa metode untuk menerjemahkan antara char dan nomornya. Kelemahan adalah contoh ñ. Semoga bisa membantu.
sumber
Ya, Anda bisa menambahkan
di baris pertama kode sumber Anda.
Anda dapat membaca detail lebih lanjut di sini https://www.python.org/dev/peps/pep-0263/
sumber