Hướng dẫn python remove bom from string - python xóa bom khỏi chuỗi
Chỉ cần sử dụng codec "UTF-8-SIG":
Điều đó cung cấp cho bạn một chuỗi
Để có được một chuỗi được mã hóa UTF-8 bình thường trở lại trong
Nó mở tệp, đọc một đoạn và viết nó vào tệp 3 byte sớm hơn so với nơi nó đọc nó. Các tập tin được viết lại tại chỗ. Vì giải pháp dễ dàng hơn là viết tệp ngắn hơn vào một tệp mới như câu trả lời của Newtover. Điều đó sẽ đơn giản hơn, nhưng sử dụng hai lần không gian đĩa trong một thời gian ngắn. Đối với việc đoán mã hóa, sau đó bạn chỉ có thể lặp qua mã hóa từ hầu hết đến cụ thể nhất:
Một tệp được mã hóa UTF-16 sẽ không giải mã là UTF-8, vì vậy chúng tôi thử với UTF-8 trước. Nếu điều đó thất bại, thì chúng tôi sẽ thử với UTF-16. Cuối cùng, chúng tôi sử dụng Latin-1-điều này sẽ luôn hoạt động vì tất cả 256 byte là giá trị pháp lý trong Latin-1. Bạn có thể muốn trả lại
Xin chào, Tôi đã đọc một số văn bản từ tệp văn bản được mã hóa UTF-8 như thế này: Text = codecs.open ('example.txt', 'r', 'utf8'). Đọc () Nếu tôi chuyển văn bản này cho một đối tượng COM, tôi có thể thấy rằng vẫn còn BOM trong tệp, đánh dấu tệp là UTF-8. Chỉ cần xóa ký tự đầu tiên trong chuỗi là không ổn, vì BOM là tùy chọn. Vì vậy, tôi đã thử một cái gì đó như thế này: if text.startswith (codecs.bom_utf8): in "tìm thấy bom" Nhưng sau đó tôi gặp lỗi sau: UnicodedEcodeError: 'ASCII' codec không thể giải mã byte 0xef ở vị trí 0: Ordinal không trong phạm vi (128) Cách đúng để loại bỏ BOM khỏi chuỗi là gì? Trân trọng, Achim 18 tháng 7 '05 #1 Bỏ qua nội dung Khi làm việc với TensorFlow và Tflearn trên Windows, tôi thường gặp sự cố với các tệp dữ liệu nguồn của mình được mã hóa dưới dạng UTF-8 với tiêu đề BOM. & nbsp; một BOM là một dấu lệnh byte, một ký tự Unicode duy nhất có tính đến tệp. & nbsp; nhiều tiện ích tải dữ liệu với mã hóa không chính xác và sẽ ném Các tệp lớn thường được sử dụng làm dữ liệu đào tạo có thể là một thách thức để mở/mã lại đúng cách để tôi tạo phương thức này để viết lại tệp tại chỗ mà không có dấu BOM.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Nhập hệ điều hành, sys, codecsos,sys,codecs def remove_bom_inplace (đường dẫn):remove_bom_inplace(path): & nbsp; & nbsp; & nbsp; & nbsp; "" "Xóa BOM Mark, nếu nó tồn tại, từ một tệp và viết lại nó tại chỗ" """""Removes BOM mark, if it exists, from a file and rewrites it in-place""" buffer_size=4096buffer_size
=4096 bom_length=len(codecs.BOM_UTF8)bom_length=len(codecs.BOM_UTF8) & nbsp;with open(path,"r+b")asfp: chunk=fp.read(buffer_size)chunk=fp.read(buffer_size) ifchunk.startswith(codecs.BOM_UTF8):ifchunk.startswith(codecs.BOM_UTF8): i=0i
=0 chunk=chunk[bom_length:]chunk=chunk[bom_length:] whilechunk:whilechunk: fp.seek(i)fp.seek(i)
fp.write(chunk)fp.write(chunk) i+=len(chunk)i+=len(chunk) fp.seek(bom_length,os.SEEK_CUR)fp.seek(bom_length,
os.SEEK_CUR) chunk=fp.read(buffer_size)chunk=fp.read(buffer_size) fp.seek(-bom_length,os.SEEK_CUR)fp.seek(-bom_length,
os.SEEK_CUR) fp.truncate()fp.truncate() Tôi thực sự sử dụng điều này trong các tập lệnh đào tạo Tflearn của mình, như thế này:
Sao cho bất kỳ lỗi liên quan đến BOM nào trong quá trình tải cố gắng sửa chữa tệp và tự động thử lại. Làm cách nào để loại bỏ ufeff trong python?Sử dụng phương thức str.Replace () để xóa \ ufeff BOM ký tự khỏi chuỗi, ví dụ: kết quả = my_str. thay thế ('\ ufeff', ''). Phương thức thay thế () sẽ loại bỏ ký tự \ ufeff khỏi chuỗi bằng cách thay thế nó bằng một chuỗi trống. replace() method to remove \ufeff BOM character from a string, e.g. result = my_str. replace('\ufeff', '') . The replace() method will remove the \ufeff character from the string by replacing it with an empty string.
Bom Python là gì?BOM Unicode (Dấu thứ tự byte) là một ký tự có thể xảy ra khi bắt đầu tệp văn bản Unicode để cho biết độ chính xác mà dữ liệu được lưu trữ. Nó rất hữu ích cho tính di động vì nó có nghĩa là các chương trình trên các hệ thống khác nhau có thể tự động phát hiện mã hóa.a character which can occur at the start of a Unicode text file to indicate what endianness the data is stored in. It's very helpful for portability as it means programs on different systems can automatically detect the encoding.
UTF với BOM là gì?Chữ ký tệp UTF-8 (thường được gọi là "BOM") xác định định dạng mã hóa thay vì thứ tự byte của tài liệu.UTF-8 là một chuỗi tuyến tính của byte và không phải chuỗi của các đơn vị 2 byte hoặc 4 byte trong đó thứ tự byte là quan trọng.Mã hóa.BOM được mã hóa.UTF-8.identifies the encoding format rather than the byte order of the document. UTF-8 is a linear sequence of bytes and not sequence of 2-byte or 4-byte units where the byte order is important. Encoding. Encoded BOM. UTF-8.
SIG UTF8 là gì?"Sig" trong "UTF-8-SIG" là viết tắt của "chữ ký" (tức là tệp UTF-8 chữ ký).Sử dụng UTF-8-SIG để đọc tệp sẽ coi BOM là siêu dữ liệu giải thích cách giải thích tệp, thay vì là một phần của nội dung tệp.the abbreviation of "signature" (i.e. signature utf-8 file). Using utf-8-sig to read a file will treat the BOM as metadata that explains how to interpret the file, instead of as part of the file contents. |