get_encoding_from_headers treats any content type containing 'text' as text/* (ISO-8859-1)

Đang mở Phù hợp với người mới
#7,644 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

@suyashgitt đang làm issue này rồi.

Từ ngày 13/11/2026.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
76/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
backend

Hướng nghiên cứu

Đọc src/requests/utils.py và kiểm tra get_encoding_from_headers, sau đó tìm các bài kiểm thử bao phủ hàm này. Tái hiện hành vi được báo cáo với các kiểu phương tiện application/vnd.context+xml, application/x-context và application/jsonx. Hoàn thành khi chỉ các kiểu text/* thực sự nhận ISO-8859-1, các kiểu không khớp trả về None, và các trường hợp đều được kiểm thử.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Summary

requests.utils.get_encoding_from_headers uses substring checks on the media type, so non-text/* types that merely contain the letters "text" are treated as text and get ISO-8859-1.

In src/requests/utils.py:

if "text" in content_type:
    return "ISO-8859-1"

Repro

from requests.utils import get_encoding_from_headers
from requests.structures import CaseInsensitiveDict as C

get_encoding_from_headers(C({"content-type": "application/vnd.context+xml"}))  # 'ISO-8859-1'
get_encoding_from_headers(C({"content-type": "application/x-context"}))        # 'ISO-8859-1'

Neither is a text/* type, so Response.encoding should be None (letting content-based detection run), not Latin-1. The same substring pattern is used for "application/json" in content_type, which would also match e.g. application/jsonx.

Suggested fix

Compare against the parsed media type, e.g. content_type.startswith("text/") and content_type == "application/json". Happy to open a PR with tests.

Checked on current main; I found no existing issue covering this.

Ngôn ngữ chính
Python
Star
54.7k
Fork
10.8k
Merge trung bình
18 phút
Pull request đã merge (30 ngày)
1

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của psf/requests

Tất cả issue của psf/requests

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.