Jawaban:
Anda benar, lihat 3.1.3. String Unicode .
Sudah sintaks sejak Python 2.0.
Python 3 menjadikannya berlebihan, karena tipe string default adalah Unicode. Versi 3.0 hingga 3.2 menghapusnya, tetapi mereka ditambahkan kembali dalam 3,3+ untuk kompatibilitas dengan Python 2 untuk membantu transisi 2 ke 3.
ur"string"
) valid dalam Python 2, tetapi sayangnya sintaks tidak valid dalam Python 3.
Huruf u u'Some String'
berarti bahwa string Anda adalah string Unicode .
T: Saya sedang terburu-buru, sangat mengerikan dan saya mendarat di sini dari Google Search. Saya mencoba menulis data ini ke file, saya mendapatkan kesalahan, dan saya perlu yang paling sederhana, mungkin cacat, solusi detik ini.
A: Anda harus benar-benar membaca Joel's Absolute Minimum Setiap Pengembang Perangkat Lunak Sepenuhnya, Positif Harus Tahu Tentang Unicode dan Kumpulan Karakter (Tanpa Alasan!) Pada rangkaian karakter.
T: jangan ada kode waktu, mohon
Denda. coba str('Some String')
atau 'Some String'.encode('ascii', 'ignore')
. Tapi Anda harus benar-benar membaca beberapa jawaban dan diskusi tentang Konversi string Unicode dan ini sangat baik, sangat baik, primer pada pengkodean karakter.
Dugaan saya adalah ini menunjukkan "Unicode", apakah benar?
Iya.
Jika demikian, sejak kapan itu tersedia?
Python 2.x.
Dalam Python 3.x string menggunakan Unicode secara default dan tidak perlu u
awalan. Catatan: dalam Python 3.0-3.2, u adalah kesalahan sintaksis. Di Python 3.3+ itu legal lagi untuk membuatnya lebih mudah untuk menulis 2/3 aplikasi yang kompatibel.
u
awalan.
six.text_type()
mana-mana untuk jumlah (mudah-mudahan sangat kecil) orang yang masih menggunakan 3. [012] - setidaknya informasinya ada sehingga Anda dapat memilih.
Saya datang ke sini karena saya memiliki sindrom char-lucu di requests
output saya . Saya pikir response.text
akan memberi saya string yang diterjemahkan dengan benar, tetapi dalam output saya menemukan double-chars lucu di mana umlaut Jerman seharusnya.
Ternyata response.encoding
entah bagaimana kosong dan jadi response
tidak tahu bagaimana cara mendekode konten dengan benar dan hanya memperlakukannya sebagai ASCII (saya kira).
Solusi saya adalah mendapatkan byte mentah dengan 'response.content' dan secara manual berlaku decode('utf_8')
untuk itu. Hasilnya adalah schöne Umlaute.
Yang diterjemahkan dengan benar
bulu
vs yang tidak benar diterjemahkan
untuk
Semua string yang dimaksudkan untuk manusia harus menggunakan u "".
Saya menemukan bahwa pola pikir berikut sangat membantu ketika berhadapan dengan string Python: Semua string manifest Python harus menggunakan u""
sintaksis. The ""
sintaks untuk array byte, hanya.
Sebelum pesta dimulai, izinkan saya menjelaskan. Sebagian besar program Python dimulai dengan menggunakan ""
untuk string. Tetapi kemudian mereka perlu mendukung dokumentasi dari Internet, sehingga mereka mulai menggunakan "".decode
dan tiba-tiba mereka mendapatkan pengecualian di mana-mana tentang mendekode ini dan itu - semua karena penggunaan ""
string. Dalam hal ini, Unicode bertindak seperti virus dan akan mendatangkan malapetaka.
Tetapi, jika Anda mengikuti aturan saya, Anda tidak akan mengalami infeksi ini (karena Anda sudah terinfeksi).
bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
u""
.
Ini Unicode.
Letakkan saja variabel di antara str()
, dan itu akan berfungsi dengan baik.
Tetapi jika Anda memiliki dua daftar seperti berikut:
a = ['co32','co36']
b = [u'co32',u'co36']
Jika Anda memeriksa set(a)==set(b)
, itu akan menjadi False, tetapi jika Anda lakukan sebagai berikut:
b = str(b)
set(a)==set(b)
Sekarang, hasilnya akan Benar.
str()
atau u'€'.encode()
) tanpa melewati penyandian. Jika string berisi non-ASCII, pengguna akan menerima UnicodeEncodeException.
b = str(b)
hanya memberikan string repr()
daftar, yaitu b = "[u'co32', u'co36']"
. Kemudianset(a)==set(b) = False