Seperti di:
u'Hello'
Dugaan saya adalah ini menunjukkan "Unicode", apakah benar?
Jika demikian, sejak kapan itu tersedia?
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.sumber
Iya.
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.sumber
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 pikirresponse.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 jadiresponse
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
vs yang tidak benar diterjemahkan
sumber
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).
sumber
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:
Jika Anda memeriksa
set(a)==set(b)
, itu akan menjadi False, tetapi jika Anda lakukan sebagai berikut:Sekarang, hasilnya akan Benar.
sumber
str()
atauu'€'.encode()
) tanpa melewati penyandian. Jika string berisi non-ASCII, pengguna akan menerima UnicodeEncodeException.b = str(b)
hanya memberikan stringrepr()
daftar, yaitub = "[u'co32', u'co36']"
. Kemudianset(a)==set(b) = False