Di file teks, ada string "Saya tidak suka ini".
Namun, ketika saya membacanya menjadi string, itu menjadi "Saya tidak \ xe2 \ x80 \ x98t seperti ini". Saya memahami bahwa \ u2018 adalah representasi unicode dari "'". saya menggunakan
f1 = open (file1, "r")
text = f1.read()
perintah untuk melakukan pembacaan.
Sekarang, apakah mungkin untuk membaca string sedemikian rupa sehingga ketika dibaca menjadi string, menjadi "Saya tidak suka ini", bukan "Saya tidak \ xe2 \ x80 \ x98t seperti ini"?
Pengeditan kedua: Saya telah melihat beberapa orang menggunakan pemetaan untuk memecahkan masalah ini, tetapi sungguh, apakah tidak ada konversi bawaan yang melakukan konversi semacam ANSI ke unicode (dan sebaliknya) ini?
Jawaban:
Ref: http://docs.python.org/howto/unicode
Karena itu, membaca Unicode dari file sangatlah sederhana:
Anda juga dapat membuka file dalam mode pembaruan, memungkinkan membaca dan menulis:
EDIT : Saya berasumsi bahwa tujuan yang Anda maksudkan hanyalah untuk dapat membaca file dengan benar menjadi string dengan Python. Jika Anda mencoba mengonversi ke string ASCII dari Unicode, maka tidak ada cara langsung untuk melakukannya, karena karakter Unicode belum tentu ada di ASCII.
Jika Anda mencoba mengonversi ke string ASCII, coba salah satu dari berikut ini:
Ganti karakter unicode tertentu dengan yang setara dengan ASCII, jika Anda hanya ingin menangani beberapa kasus khusus seperti contoh khusus ini
Gunakan
unicodedata
modulnormalize()
danstring.encode()
metode untuk mengkonversi sebaik mungkin ke ASCII terdekat berikutnya yang setara (Ref https://web.archive.org/web/20090228203858/http://techxplorer.com/2006/07/18/converting- unicode-to-ascii-using-python ):sumber
codecs
modul tidak menangani mode baris baru universal dengan benar. Gunakanio.open()
sebagai gantinya pada Python 2.7+ (ini dibangunopen()
pada Python 3).Ada beberapa hal yang perlu diperhatikan.
Karakter \ u2018 hanya dapat muncul sebagai fragmen representasi string unicode di Python, misalnya jika Anda menulis:
Sekarang jika Anda hanya ingin mencetak string unicode dengan rapi, cukup gunakan
encode
metode unicode :Untuk memastikan bahwa setiap baris dari file mana pun akan dibaca sebagai unicode, Anda sebaiknya menggunakan
codecs.open
fungsi daripada hanyaopen
, yang memungkinkan Anda menentukan pengkodean file:sumber
Tapi yang sebenarnya adalah "Saya tidak suka ini" dan bukan "Saya tidak suka ini". Karakter u '\ u2018' adalah karakter yang sama sekali berbeda dari "'" (dan, secara visual, harus lebih sesuai dengan' ``).
Jika Anda mencoba mengonversi unicode yang dikodekan menjadi ASCII biasa, Anda mungkin dapat menyimpan pemetaan tanda baca unicode yang ingin Anda terjemahkan ke dalam ASCII.
Ada banyak sekali karakter tanda baca dalam unicode , namun, saya kira Anda hanya dapat mengandalkan beberapa dari mereka yang benar-benar digunakan oleh aplikasi apa pun yang membuat dokumen yang Anda baca.
sumber
Dimungkinkan juga untuk membaca file teks yang disandikan menggunakan metode baca python 3:
Dengan variasi ini, tidak perlu mengimpor pustaka tambahan
sumber
Mengesampingkan fakta bahwa file teks Anda rusak (U + 2018 adalah tanda kutip kiri, bukan apostrof): iconv dapat digunakan untuk mentransliterasi karakter unicode ke ascii.
Anda harus menggunakan Google untuk "iconvcodec", karena modul tersebut tampaknya tidak lagi didukung dan saya tidak dapat menemukan beranda kanonisnya.
Atau Anda dapat menggunakan
iconv
utilitas baris perintah untuk membersihkan file Anda:sumber
Ada kemungkinan bahwa entah bagaimana Anda memiliki string non-unicode dengan karakter escape unicode, misalnya:
Ini benar-benar pernah terjadi pada saya sebelumnya. Anda dapat menggunakan
unicode_escape
codec untuk memecahkan kode string menjadi unicode dan kemudian menyandikannya ke format apa pun yang Anda inginkan:sumber
Ini adalah cara Pythons yang menunjukkan kepada Anda string yang dikodekan unicode. Tetapi saya pikir Anda harus dapat mencetak string di layar atau menuliskannya menjadi file baru tanpa masalah.
sumber
Sebenarnya U + 2018 adalah representasi Unicode dari karakter khusus '. Jika mau, Anda dapat mengonversi karakter tersebut menjadi U + 0027 dengan kode ini:
Selain itu, apa yang Anda gunakan untuk menulis file?
f1.read()
harus mengembalikan string yang terlihat seperti ini:Jika mengembalikan string ini , file salah ditulis:
sumber