01/10/2018, 16:08

Lỗi run file bytes and character encodings

Em đang học python theo cuốn learn python 3 the hard way nhưng tới bài 23 thì run file nó không chạy mong mọi người giúp đỡ.
Em đã chỉnh codepage sang utf-8 nhưng nó vẫn không chạy, code:

import sys
script, input_encoding, error = sys.argv


def main(language_file, encoding, errors):
	line = language_file.readline()

	if line:
		print_line(line, encoding, errors)
		return main(language_file, encoding, errors)


def print_line(line, encoding, errors):
	next_lang = line.strip()
	raw_bytes = next_lang.encode(encoding, errors=errors)
	cooked_string = raw_bytes.decode(encoding, errors=errors)

	print(raw_bytes, "<===>", cooked_string)


languages = open("test.txt", encoding="utf-8")

main(languages, input_encoding, error)

Lỗi khi run file:

*grab popcorn* viết 18:10 ngày 01/10/2018

Trước mình bị, đổi mode reading sang reading binary (rb) chứ ko để reading text là hết.

I Am Groot viết 18:14 ngày 01/10/2018

em đổi rồi nhưng vẫn không chạy được, nó bị lỗi này:

*grab popcorn* viết 18:13 ngày 01/10/2018

khi là rb rồi bạn bỏ encoding luôn :3

I Am Groot viết 18:23 ngày 01/10/2018

vẫn lỗi ạ:

*grab popcorn* viết 18:16 ngày 01/10/2018

Vì nó là raw_bytes rồi nên bạn ko cần encoding nữa

I Am Groot viết 18:22 ngày 01/10/2018

Chị có thể ghi ra rõ ràng được không ạ? Chứ em bỏ encoding kiểu gì nó cũng báo lỗi, em cũng search google rồi nhưng cũng không sửa được (chắc do không đúng keyword hoặc do hơi kém )

Mà cú pháp thằng encoding là str.encode(encoding=“utf-8”, errors=“strict”) mà vẫn sửa được ạ ?

*grab popcorn* viết 18:14 ngày 01/10/2018


Thôi vầy nè
Để in ra utf-8 thì:

f = open("a.txt", "rb")
print(f.readline().decode('utf8'))

Vì nó là đang là một chuỗi byte rồi (lí do là đọc binary). Nên nếu muốn encode thì phải decode rồi mới encode được.

f.readline().decode('utf8').encode('utf8')
I Am Groot viết 18:18 ngày 01/10/2018

nếu muốn encode thì phải decode rồi mới encode được.

Em đã để decode lên trước encode thì nó chỉ có chạy dòng đầu tiên và nó báo lỗi. Em thử tạo 1 file giống giống như chị ví dụ thì cũng lôi tương tự:

*grab popcorn* viết 18:15 ngày 01/10/2018

Bạn đưa file đó cho mình xem đc ko

I Am Groot viết 18:15 ngày 01/10/2018

code đây ạ:

import sys
script = sys.argv


def main(language_file, encoding):
	line = language_file.readline()

	if line:
		print_line(line, encoding)
		return main(language_file, encoding)


def print_line(line, encoding):
	next_lang = line.strip()
	raw_bytes = next_lang.decode('utf-8')
	cooked_string = raw_bytes.encode('utf-8')

	print(raw_bytes, "<===>", cooked_string)


f = open("test.txt", 'rb')

main(f, encoding='utf-8')
*grab popcorn* viết 18:13 ngày 01/10/2018

À ý mình là file txt ấy

I Am Groot viết 18:10 ngày 01/10/2018

Nội dung file đây ạ

Afrikaans
አማርኛ
Аҧсшәа
العربية
Aragonés
Arpetan
Azərbaycanca
Bamanankan
বাংলা
Bân-lâm-gú
Беларуская
Български
Boarisch
Bosanski
Буряад
Català 
Чӑвашла
Čeština
Cymraeg
Dansk
Deutsch
Eesti
Ελληνικά
Español
Esperanto
فارسی
Français
Frysk
Gaelg
GÃ idhlig
Galego
한국어
Õ€Õ¡ÕµÕ¥Ö€Õ¥Õ¶
हिन्दी
Hrvatski
Ido
Interlingua
Italiano
עברית
ಕನ್ನಡ
Kapampangan
ქართული
Қазақша
Kreyòl ayisyen
Latgaļu
Latina
Latviešu
Lëtzebuergesch
Lietuvių
Magyar
Македонски
Malti
मराठी
მარგალური
مازِرونی
Bahasa Melayu
Монгол
Nederlands
नेपाल भाषा
日本語
Norsk bokmål
Nouormand
Occitan
Oʻzbekcha/ўзбекча
ਪੰਜਾਬੀ
پنجابی
پښتو
Plattdüütsch
Polski
Português
Română
Romani
Русский
Seeltersk
Shqip
Simple English
Slovenčina
کوردیی ناوەندی
Српски / srpski
Suomi
Svenska
Tagalog
தமிழ்
ภาษาไทย
Taqbaylit
Татарча/tatarça
తెలుగు
Тоҷикӣ
Türkçe
Українська
اردو
Tiếng Việt
Võro
文言
吴语
ייִדיש
中文
*grab popcorn* viết 18:16 ngày 01/10/2018

Mình đọc hoàn toàn bth luôn.
Bạn extract file này ra từ đâu đúng không?

I Am Groot viết 18:23 ngày 01/10/2018

đúng ạ, em làm y như hướng dẫn

*grab popcorn* viết 18:23 ngày 01/10/2018

Có thể file bạn extract ko phải là 1 file text utf8 mà nó là binary luôn. Nên khi extract ra, có các byte kèm theo nên từ đó ko decode được :3

I Am Groot viết 18:15 ngày 01/10/2018

à rồi em hiểu em hiểu, thấy mấy ông trên GitHub cũng nói vậy mà em không ngộ ra hóa ra do lúc em lưu lại file không sửa lại utf-8. Em cám ơn, ngồi từ sáng tới mãi mới ra

Bài liên quan
0