Tôi đang sử dụng Python 3.5 và tôi đang cố gắng lấy một khối văn bản byte có thể hoặc không chứa các ký tự đặc biệt của Trung Quốc và xuất nó vào một tệp. Nó hoạt động cho các mục không chứa các ký tự tiếng Trung, nhưng sẽ bị ngắt khi thực hiện. Các ký tự Trung Quốc luôn là tên của một người, và luôn luôn bổ sung cho chính tả tiếng Anh của tên của họ. Văn bản được định dạng JSON và cần phải được giải mã trước khi tôi có thể tải nó. Việc giải mã có vẻ ổn và không cho tôi bất kỳ lỗi nào. Khi tôi cố gắng và viết văn bản giải mã vào một tập tin nó mang lại cho tôi thông báo lỗi sau:Vấn đề giải mã Python với các ký tự tiếng Trung
UnicodeEncodeError: 'charmap' codec can't encode characters in position 14-18: character maps to undefined
Dưới đây là một ví dụ về các dữ liệu thô mà tôi nhận được trước khi tôi làm bất cứ điều gì với nó:
b' "isBulkRecipient": "false",\r\n "name": "Name in, English \xef'
b'\xab\x62\xb6\xe2\x15\x8a\x8b\x8a\xee\xab\x89\xcf\xbc\x8a",\r\n
đây là mã mà tôi đang sử dụng:
recipientData = json.loads(recipientContent.decode('utf-8', 'ignore'))
recipientName = recipientData['signers'][0]['name']
pprint(recipientName)
with open('envelope recipient list.csv', 'a', newline='') as fp:
a = csv.writer(fp, delimiter=',')
csvData = [[recipientName]]
a.writerows(csvData)
các recipientContent
được lấy từ một cuộc gọi API. Tôi không cần phải có các ký tự Trung Quốc trong tập tin đầu ra. Bất kỳ lời khuyên nào sẽ được đánh giá cao!
Cập nhật:
Tôi đã làm một số cách giải quyết dẫn sử dụng cho mỗi mục mà phá vỡ, và đến mục khác mà không chứa các ký tự đặc biệt Trung Quốc, nhưng đã có chúng từ các ngôn ngữ khác, và đã phá vỡ chương trình như tốt. Các ký tự đặc biệt chỉ có trong trường tên. Vì vậy, một cái tên có thể là một cái gì đó giống như "Ałex", nơi nó là một hỗn hợp của các nhân vật bình thường và đặc biệt. Trước khi tôi giải mã chuỗi chứa thông tin này, tôi có thể in ra màn hình và có vẻ như sau: b'name": "A\xc5ex",\r\n
Nhưng sau khi tôi giải mã nó thành utf-8 nó sẽ cho tôi lỗi nếu tôi cố gắng xuất nó. Thông báo lỗi là: UnicodeEncodeError: 'charmap' codec can't encode character 'u0142' in position 2- character maps to -undefined-
Tôi đã tra cứu những gì \ u0142 và đó là ký tự đặc biệt ł.
Chuỗi ví dụ không xuất hiện để được UTF-8 (hay bất kỳ multibyte chung Trung Quốc mã hóa). Bạn có chắc là mã UTF-8 được mã hóa (hoặc thậm chí là tiếng Trung Quốc) không? – univerio
bạn phải kiểm tra 'Loại nội dung'. Nếu đó là 'application/json; charset = utf-16', sử dụng 'utf-16'. Mặc định cho 'application/json' là' utf-8' –
Tôi không chắc chắn 100% rằng utf-8 của nó bởi vì dịch vụ web im nhận dữ liệu từ không có tài liệu rất tốt, nhưng tôi đã thử một số các loại mã hóa khác nhau, bao gồm utf-16. Tôi chắc chắn rằng nó có chứa các ký tự Trung Quốc. –