01/10/2018, 16:41

Hỏi về đọc hàm đọc file open() trong python

Vâng xin chào mọi người vẫn là em với những câu hỏi ngu.

Mọi người cho em hỏi em đang nghiên cứu python , em đang coi cái phần đọc file bằng hàm open thì tới đoạn này em thấy hơi thắc mắc không hiểu tại sao dòng đầu tiên luôn bị thêm 1 khoảng trắng .

-Em thử dùng hàm len(x) để xem số lượng ký tự của dòng 1 thì thấy : dấu trắng là 1 ký tự , số “1” trong file là 1 ký tự , “ ” được coi là 1 ký tự --> tổng là 3 . Vậy tại sao lại có khoẳng trắng ở đây mặc dù trong file của em không có ạ ?
Mong được mọi người chỉ bảo ạ.

Trương Tấn Phát viết 18:42 ngày 01/10/2018

Trong mã hóa UTF8 có 2 loại: UTF8 with BOM (gọi tắt là UTF8) và UTF8 without BOM.

Thường là dạng thứ nhất được dùng nhiều, dạng này sẽ có một kí tự (gọi là kí tự BOM) được thêm vào đầu tập tin để đánh dấu nó là UTF8. Kí tự này có mã là 0xFEFF trong bảng mã Unicode.

Dạng thứ 2 thì không có kí tự này ở đầu, gần như tương đương với mã hóa ANSI.

Có lẽ kí tự trước số 1 là kí tự BOM.

Nguyễn Văn Vương viết 18:54 ngày 01/10/2018

dạ cảm ơn bác đã chỉ bảo , vậy giờ em phải khai báo encoding là như thế nào để được UTF8 without BOM hoặc xóa bỏ ký tự BOM ở đầu vậy ạ ?

Nguyễn Văn Vương viết 18:48 ngày 01/10/2018

Em cảm ơn bác em làm được rồi , khai báo encode là “utf-8-sig” là được , em cảm ơn bác rất nhiều đã chỉ bảo ạ .
Up lên cho bác nào đó cần

Trương Tấn Phát viết 18:46 ngày 01/10/2018

Có thể có nhiều bạn không hiểu/thắc mắc.

Như mình nói: UTF8 without BOM tương tự ANSI.

Nó xem như một dạng tự “hiểu”. Nếu biết cách mà các kí tự Unicode được mã hóa trong UTF8 thì bạn sẽ biết: mỗi kí tự Unicode (0x100 - 0xffff) đều được mã hóa từ 2-4 kí tự ANSI (0x80 - 0xff).

Hãy thử nội dung sau:

Trương Tấn Phát

Sao chép > mở Notepad > dán vào > lưu (ANSI) > đóng Notepad > Mở lại tập tin vừa lưu nó sẽ thành:

Trương Tấn Phát

Giờ nó đã tự chuyển sang UTF8 without BOM.

Nói thêm thế thôi

Nguyễn Văn Vương viết 18:57 ngày 01/10/2018

Em cảm ơn bác rất nhiều ạ , em sẽ ghi nhớ

Bài liên quan
0