Saya memiliki string yang terlihat seperti ini:
6Â 918Â 417Â 712
Cara yang jelas untuk memangkas string ini (seperti yang saya mengerti Python) adalah dengan mengatakan string itu dalam variabel yang disebut s
, kita dapatkan:
s.replace('Â ', '')
Itu seharusnya berhasil. Tetapi tentu saja ia mengeluh bahwa karakter non-ASCII '\xc2'
dalam file blabla.py tidak dikodekan.
Saya tidak pernah bisa mengerti bagaimana beralih di antara pengkodean yang berbeda.
Ini kodenya, benar-benar sama seperti di atas, tetapi sekarang ada dalam konteks. File tersebut disimpan sebagai UTF-8 di notepad dan memiliki header berikut:
#!/usr/bin/python2.4
# -*- coding: utf-8 -*-
Kode:
f = urllib.urlopen(url)
soup = BeautifulSoup(f)
s = soup.find('div', {'id':'main_count'})
#making a print 's' here goes well. it shows 6Â 918Â 417Â 712
s.replace('Â ','')
save_main_count(s)
Tidak lebih dari s.replace
...
u
Jawaban:
Python 2 digunakan
ascii
sebagai pengkodean default untuk file sumber, yang berarti Anda harus menentukan pengkodean lain di bagian atas file untuk menggunakan karakter unicode non-ascii dalam literal. Python 3 digunakanutf-8
sebagai pengkodean default untuk file sumber, jadi ini bukan masalah.Lihat: http://docs.python.org/tutorial/interpreter.html#source-code-encoding
Untuk mengaktifkan encoding sumber utf-8, ini akan masuk ke salah satu dari dua baris teratas:
Di atas ada di dokumen, tetapi ini juga berfungsi:
Pertimbangan tambahan:
File sumber harus disimpan menggunakan pengkodean yang benar di editor teks Anda juga.
Dalam Python 2, literal unicode harus memiliki a
u
sebelumnya, sepertis.replace(u"Â ", u"")
pada Python 3, cukup gunakan tanda kutip. Di Python 2, Anda bisafrom __future__ import unicode_literals
mendapatkan perilaku Python 3, tetapi perlu diketahui bahwa ini memengaruhi seluruh modul saat ini.s.replace(u"Â ", u"")
juga akan gagal jikas
bukan string unicode.string.replace
mengembalikan string baru dan tidak mengedit pada tempatnya, jadi pastikan Anda juga menggunakan nilai yang dikembalikansumber
# coding: utf-8
.-*-
bukan untuk dekorasi, tetapi kemungkinan besar Anda tidak akan membutuhkannya. Saya pikir itu ada di sana untuk cangkang tua.sunting: dorongan pertama saya selalu menggunakan filter, tetapi ekspresi generator lebih hemat memori (dan lebih pendek) ...
Perlu diingat bahwa ini dijamin berfungsi dengan encoding UTF-8 (karena semua byte dalam karakter multi-byte memiliki bit tertinggi yang disetel ke 1).
sumber
u
jika itu literal.sumber
Kode berikut akan mengganti semua karakter non ASCII dengan tanda tanya.
sumber
Menggunakan Regex:
sumber
Terlambat untuk mendapatkan jawaban, tetapi string aslinya adalah UTF-8 dan '\ xc2 \ xa0' adalah UTF-8 untuk NO-BREAK SPACE. Cukup decode string asli sebagai
s.decode('utf-8')
(\ xa0 ditampilkan sebagai spasi ketika salah diterjemahkan sebagai Windows-1252 atau latin-1:Contoh (Python 3)
Keluaran
sumber
Ini akan dicetak
6 918 417 712
sumber
Saya tahu ini utas lama, tetapi saya merasa harus menyebutkan metode terjemahan, yang selalu merupakan cara yang baik untuk mengganti semua kode karakter di atas 128 (atau lainnya jika perlu).
Penggunaan : str. terjemahkan ( table [, deletechars] )
Dimulai dengan Python 2.6 , Anda juga dapat mengatur tabel ke Tidak Ada, dan menggunakan deletechars untuk menghapus karakter yang tidak Anda inginkan seperti pada contoh yang ditampilkan dalam dokumen standar di http://docs.python.org/library/stdtypes. html .
Dengan string unicode, tabel terjemahan bukanlah string 256 karakter tetapi dikt dengan ord () karakter yang relevan sebagai kunci. Tapi bagaimanapun mendapatkan string ascii yang tepat dari string unicode cukup sederhana, menggunakan metode yang disebutkan oleh truppo di atas, yaitu: unicode_string.encode ("ascii", "ignore")
Sebagai ringkasan, jika karena alasan tertentu Anda benar-benar perlu mendapatkan string ascii (misalnya, saat Anda memunculkan pengecualian standar dengan
raise Exception, ascii_message
), Anda dapat menggunakan fungsi berikut:Hal yang baik dengan terjemahan adalah Anda benar-benar dapat mengonversi karakter beraksen menjadi karakter ascii non-aksen yang relevan, bukan hanya menghapusnya atau menggantinya dengan '?'. Ini sering berguna, misalnya untuk tujuan pengindeksan.
sumber
dan buat
.py
file Anda menjadi unicode.sumber
Ini adalah peretasan kotor, tetapi mungkin berhasil.
sumber
Untuk apa nilainya, set karakter saya adalah
utf-8
dan saya telah memasukkan# -*- coding: utf-8 -*-
baris " " klasik .Namun, saya menemukan bahwa saya tidak memiliki Universal Newlines ketika membaca data ini dari halaman web.
Teks saya terdiri dari dua kata, dipisahkan oleh "
\r\n
". Saya hanya membelah\n
dan mengganti"\n"
.Setelah saya mengulang dan melihat karakter yang dipermasalahkan, saya menyadari kesalahannya.
Jadi, bisa juga dalam kumpulan karakter ASCII , tetapi karakter yang tidak Anda harapkan.
sumber