Câu trả lời:
Bạn nói đúng, xem 3.1.3. Chuỗi Unicode .
Đó là cú pháp từ Python 2.0.
Python 3 làm cho chúng trở nên dư thừa, vì kiểu chuỗi mặc định là Unicode. Các phiên bản 3.0 đến 3.2 đã loại bỏ chúng, nhưng chúng đã được thêm lại trong 3.3+ để tương thích với Python 2 để hỗ trợ quá trình chuyển đổi từ 2 đến 3.
ur"string"
) là hợp lệ trong Python 2, nhưng không may là cú pháp không hợp lệ trong Python 3.
Chữ u u'Some String'
có nghĩa là chuỗi của bạn là một chuỗi Unicode .
H: Tôi đang rất vội, khủng khiếp và tôi đã đến đây từ Google Tìm kiếm. Tôi đang cố gắng ghi dữ liệu này vào một tệp, tôi đang gặp lỗi và tôi cần giải pháp đơn giản nhất, có lẽ là thiếu sót, thứ hai này.
Trả lời: Bạn thực sự nên đọc bài luận tối thiểu tuyệt đối của mỗi nhà phát triển phần mềm của Joel , Phải tích cực phải biết về Unicode và các bộ ký tự (Không có lý do!) Về các bộ ký tự.
Q: xin vui lòng không có mã thời gian xin vui lòng
A: Tốt thôi. thử str('Some String')
hay 'Some String'.encode('ascii', 'ignore')
. Nhưng bạn thực sự nên đọc một số câu trả lời và thảo luận về Chuyển đổi chuỗi Unicode và đoạn mồi tuyệt vời, xuất sắc, tuyệt vời này về mã hóa ký tự.
Tôi đoán là nó chỉ ra "Unicode", nó có đúng không?
Đúng.
Nếu vậy, kể từ khi nào nó có sẵn?
Con trăn 2.x.
Trong Python 3.x, các chuỗi sử dụng Unicode theo mặc định và không cần u
tiền tố. Lưu ý: trong Python 3.0-3.2, u là lỗi cú pháp. Trong Python 3.3+, nó trở lại hợp pháp để giúp viết 2/3 ứng dụng tương thích dễ dàng hơn.
u
tiền tố.
six.text_type()
ở mọi nơi cho số người (hy vọng rất nhỏ) vẫn sử dụng 3. [012] - ít nhất là thông tin có sẵn để bạn có thể chọn.
Tôi đến đây vì tôi bị hội chứng buồn cười ở requests
đầu ra. Tôi nghĩ rằng response.text
sẽ cung cấp cho tôi một chuỗi được giải mã chính xác, nhưng trong đầu ra, tôi đã tìm thấy các ký tự kép vui nhộn trong đó các ô chữ Đức nên có.
Hóa ra response.encoding
là trống rỗng bằng cách nào đó và vì vậy response
không biết làm thế nào để giải mã chính xác nội dung và chỉ coi nó là ASCII (tôi đoán).
Giải pháp của tôi là lấy các byte thô với 'answer.content' và áp dụng thủ công decode('utf_8')
cho nó. Kết quả là schöne Umlaute.
Giải mã chính xác
yêu
so với giải mã không đúng
fĂźr
Tất cả các chuỗi có nghĩa là cho con người nên sử dụng u "".
Tôi thấy rằng những suy nghĩ sau đây giúp ích rất nhiều khi xử lý các chuỗi Python: Tất cả các chuỗi tệp kê khai Python nên sử dụng u""
cú pháp. Các ""
cú pháp là cho mảng byte, chỉ.
Trước khi bắt đầu bashing, hãy để tôi giải thích. Hầu hết các chương trình Python bắt đầu với việc sử dụng ""
cho chuỗi. Nhưng sau đó, họ cần hỗ trợ tài liệu trên Internet, vì vậy họ bắt đầu sử dụng "".decode
và đột nhiên họ nhận được ngoại lệ ở mọi nơi về việc giải mã cái này và cái kia - tất cả chỉ vì sử dụng ""
chuỗi. Trong trường hợp này, Unicode hoạt động như một virus và sẽ tàn phá.
Nhưng, nếu bạn tuân theo quy tắc của tôi, bạn sẽ không bị nhiễm trùng này (vì bạn sẽ bị nhiễm bệnh).
bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
u""
.
Đó là Unicode.
Chỉ cần đặt biến giữa str()
, và nó sẽ hoạt động tốt.
Nhưng trong trường hợp bạn có hai danh sách như sau:
a = ['co32','co36']
b = [u'co32',u'co36']
Nếu bạn kiểm tra set(a)==set(b)
, nó sẽ là Sai, nhưng nếu bạn làm như sau:
b = str(b)
set(a)==set(b)
Bây giờ, kết quả sẽ là Đúng.
str()
hoặc u'€'.encode()
) mà không chuyển mã hóa. Nếu chuỗi chứa không phải ASCII, người dùng sẽ nhận được UnicodeEncodeException.
b = str(b)
chỉ đưa ra chuỗi repr()
của danh sách, tức là b = "[u'co32', u'co36']"
. Sau đóset(a)==set(b) = False