Là dự án giúp tôi tìm hiểu Python, tôi đang tạo một trình xem CMD của Reddit bằng cách sử dụng dữ liệu json (ví dụ: www.reddit.com/all/ .json). Khi một số bài đăng hiển thị và tôi cố gắng in chúng (đó là những gì tôi giả định là gây ra lỗi), tôi nhận được lỗi này:Không thể in ký tự ' u2019' bằng Python từ đối tượng JSON
Traceback (cuộc gọi gần đây nhất): Tệp "C: \ Users \ nsaba \ Desktop \ reddit_viewer.py ", dòng 33, in in ("% d. (% d)% s \ n "% (i + 1, obj ['dữ liệu'] ['điểm'], obj ['dữ liệu'] [ 'title']))
file "C: \ Python33 \ lib \ mã hóa \ cp437.py", dòng 19, trong mã hóa trở codecs.charmap_encode (đầu vào, self.errors, encoding_map) [0] UnicodeEncodeError: codec 'charmap' không thể mã hóa ký tự '\ u2019' ở vị trí 32: bản đồ ký tự thành
Đây là nơi tôi xử lý các dữ liệu:
request = urllib.request.urlopen(url)
content = request.read().decode('utf-8')
jstuff = json.loads(content)
Dòng Tôi sử dụng để in các dữ liệu được liệt kê trong các lỗi trên:
print ("%d. (%d) %s\n" % (i+1, obj['data']['score'], obj['data']['title']))
bất cứ ai có thể đề xuất, nơi tôi có thể đi sai?
Vấn đề gần như chắc chắn không liên quan gì đến JSON, hoặc với bất kỳ thứ gì khác trong mã của bạn. Hãy thử chỉ 'in ('\ u2019')' và xem bạn có gặp lỗi tương tự không. Nếu vậy, vấn đề là thiết bị đầu cuối của bạn ("hộp DOS") không được thiết lập để làm đầu ra Unicode đúng cách, và đó là những gì bạn cần phải sửa chữa. – abarnert
Có bạn đã đúng. Lý do cho dữ liệu bổ sung là vì tôi đã học hỏi các câu hỏi được cung cấp thông tin mà tôi có, và không phải về những gì tôi nghĩ là có thể. –
Nhưng bạn nên đăng ví dụ hoàn chỉnh tối thiểu thể hiện vấn đề của bạn. Đó là những gì một [SSCCE] (http://sscce.org) là tất cả về. Nếu 'in ('\ u2019')' là đủ để chứng minh điều đó, thì bất kỳ ví dụ phức tạp nào khác cũng sẽ chỉ dẫn mọi người vào những cuộc săn ngỗng hoang dã. Nếu bạn lo lắng mọi người có thể hỏi "Tại sao bạn muốn in ký tự đó?", Thì bạn có thể thêm ngữ cảnh giải thích nó ... nhưng vẫn còn, dẫn đến vấn đề thực tế. – abarnert