cuốn sách gpt4 ai đã làm

Các ký tự BOM được sao chép sang JSON bằng Python 3

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 09:57:49 29 4
mua khóa gpt4 Nike

Trong ứng dụng của tôi, người dùng có thể tải lên một tệp (tệp văn bản) và tôi cần đọc nó cũng như tạo đối tượng json cho một lệnh gọi API khác.

tôi sử dụng

mở tập tin
f = open(tệp, mã hóa="utf-8")

Lấy từ đầu tiên và xây dựng một đối tượng Json,...

Vấn đề của tôi là một số tệp (đặc biệt là các tệp từ môi trường Microsoft) có đối tượng BOM ngay từ đầu. Vấn đề là Json của tôi hiện có ký tự này trong đó

{
"word:"\\ufeffMyWord"
}

Tất nhiên, kể từ thời điểm này, API sẽ không hoạt động bình thường.

Rõ ràng là tôi đang thiếu thứ gì đó, đối tượng BOM có nên bị xóa vì utf-8 không? (Vì nó không phải là utf-8-sig).

Làm thế nào để khắc phục vấn đề này?

câu trả lời hay nhất

Không, tiêu chuẩn UTF-8 không xác định ký tự BOM. Điều này là do UTF-8 không có vấn đề mơ hồ về thứ tự byte như UTF-16 và UTF-32. Hiệp hội Unicode không khuyến nghị sử dụng U+FEFF khi bắt đầu các tệp được mã hóa UTF-8 và IETF tích cực không khuyến khích các lựa chọn thay thế để chỉ định codec nếu chúng tồn tại. từBài viết trên Wikipedia về cách sử dụng BOM trong UTF-8 :

Tiêu chuẩn Unicode cho phép BOM ở dạng UTF-8, nhưng không yêu cầu hoặc khuyến nghị sử dụng nó.

[…]

IETF khuyến nghị rằng nếu một giao thức (a) luôn sử dụng UTF-8 hoặc (b) có một số cách khác để chỉ ra mã hóa nào đang được sử dụng thì giao thức đó "NÊN cấm sử dụng U+FEFF làm chữ ký".

Tiêu chuẩn Unicode chỉ "cho phép" BOM vì đây là ký tự thông thường giống như bất kỳ ký tự nào khác; nó là ký tự khoảng trắng không ngắt có độ rộng bằng 0. Vì vậy, Hiệp hội Unicode khuyến nghị rằng khi giải mãĐừng xóa, để lưu giữ thông tin (trong trường hợp nó có ý nghĩa khác hoặc bạn muốn duy trì khả năng tương thích với các công cụ đã dựa vào nó).

Bạn có hai lựa chọn:

  • Đầu tiên hãy xóa chuỗi, U+FEFF được coi là khoảng trắng, vì vậy hãy sử dụng str.strip() Di dời. Hoặc xóa BOM một cách rõ ràng:

    text = text.lstrip('\ufeff') # xóa BOM nếu có

    (Về mặt kỹ thuật, điều này sẽ loại bỏ bất kỳ số lượng ký tự khoảng trắng không ngắt có độ rộng bằng 0 nào, nhưng đó có thể là điều bạn muốn).

  • Sử dụng thay thế utf-8-sig codec để mở tập tin. Codec này đã được thêm vào để xử lý các tệp như vậy bằng cách xóa rõ ràng chuỗi byte UTF-8 BOM ngay từ đầu (nếu có) trước khi giải mã. Nó có thể xử lý các tập tin mà không cần các byte này.

Về python - các ký tự BOM được sao chép sang JSON trong Python 3, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/45099079/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress