Hướng dẫn are python strings utf - là chuỗi trăn utf

Bạn đã vấp phải vấn đề chung với mã hóa: Làm thế nào tôi có thể biết mã hóa nào là mã hóa?

Trả lời: Bạn không thể trừ khi định dạng tệp cung cấp cho điều này. XML, ví dụ, bắt đầu với:


Tiêu đề này đã được lựa chọn cẩn thận để nó có thể được đọc bất kể mã hóa. Trong trường hợp của bạn, không có gợi ý như vậy, do đó, cả biên tập viên và Python của bạn đều không biết chuyện gì đang xảy ra. Do đó, bạn phải sử dụng mô -đun codecs và sử dụng codecs.open(path,mode,encoding) cung cấp bit còn thiếu trong Python.

Đối với trình soạn thảo của bạn, bạn phải kiểm tra xem nó có cung cấp một số cách để đặt mã hóa tệp không.

Điểm của UTF-8 là có thể mã hóa các ký tự 21 bit (Unicode) dưới dạng luồng dữ liệu 8 bit (vì đó là điều duy nhất mà tất cả các máy tính trên thế giới có thể xử lý). Nhưng vì hầu hết các OSS có trước thời đại Unicode, chúng không có công cụ phù hợp để đính kèm thông tin mã hóa vào các tệp trên đĩa cứng.

Vấn đề tiếp theo là đại diện trong Python. Điều này được giải thích hoàn hảo trong bình luận của Heikogerlach. Bạn phải hiểu rằng bảng điều khiển của bạn chỉ có thể hiển thị ASCII. Để hiển thị Unicode hoặc bất cứ thứ gì> = Charcode 128, nó phải sử dụng một số phương tiện thoát ra. Trong trình soạn thảo của bạn, bạn không được nhập chuỗi hiển thị thoát nhưng ý nghĩa của chuỗi (trong trường hợp này, bạn phải nhập Umlaut và lưu tệp).

Điều đó nói rằng, bạn có thể sử dụng hàm python eval () để biến chuỗi thoát ra thành một chuỗi:

>>> x = eval("'Capit\\xc3\\xa1n\\n'")
>>> x
'Capit\xc3\xa1n\n'
>>> x[5]
'\xc3'
>>> len(x[5])
1

Như bạn có thể thấy, chuỗi "\ xc3" đã được biến thành một ký tự duy nhất. Đây bây giờ là một chuỗi 8 bit, UTF-8 được mã hóa. Để nhận unicode:

>>> x.decode('utf-8')
u'Capit\xe1n\n'

Gregg Lind đã hỏi: Tôi nghĩ có một số phần còn thiếu ở đây: Tệp F2 chứa: Hex:

0000000: 4361 7069 745c 7863 335c 7861 316e  Capit\xc3\xa1n

codecs.open('f2','rb', 'utf-8'), ví dụ, đọc tất cả chúng trong một ký tự riêng biệt (dự kiến) có cách nào để ghi vào một tệp trong ASCII sẽ hoạt động không?

Trả lời: Điều đó phụ thuộc vào ý của bạn. ASCII không thể đại diện cho các ký tự> 127. Vì vậy, bạn cần một số cách để nói "một vài ký tự tiếp theo có nghĩa là một cái gì đó đặc biệt", đó là những gì chuỗi "\ x" làm. Nó nói: Hai ký tự tiếp theo là mã của một ký tự. "\ u" thực hiện tương tự bằng cách sử dụng bốn ký tự để mã hóa Unicode lên đến 0xffff (65535).

Vì vậy, bạn không thể trực tiếp viết unicode vào ASCII (vì ASCII đơn giản là không chứa cùng một ký tự). Bạn có thể viết nó dưới dạng chuỗi thoát (như trong F2); Trong trường hợp này, tệp có thể được biểu diễn dưới dạng ASCII. Hoặc bạn có thể viết nó dưới dạng UTF-8, trong trường hợp đó, bạn cần một luồng an toàn 8 bit.

Giải pháp của bạn sử dụng decode('string-escape') không hoạt động, nhưng bạn phải biết bạn sử dụng bao nhiêu bộ nhớ: gấp ba lần số lượng sử dụng

>>> x = eval("'Capit\\xc3\\xa1n\\n'")
>>> x
'Capit\xc3\xa1n\n'
>>> x[5]
'\xc3'
>>> len(x[5])
1
0.

Hãy nhớ rằng một tệp chỉ là một chuỗi các byte với 8 bit. Cả bit và byte đều không có ý nghĩa. Chính bạn là người nói "65 có nghĩa là 'A'". Vì

>>> x = eval("'Capit\\xc3\\xa1n\\n'")
>>> x
'Capit\xc3\xa1n\n'
>>> x[5]
'\xc3'
>>> len(x[5])
1
1 sẽ trở thành "à" nhưng máy tính không có cách nào để biết, bạn phải nói bằng cách chỉ định mã hóa được sử dụng khi viết tệp.

LÀm Cách nÀo Để in văn bản Được MÃ HÓA UTF-8 VÀO

print u"some unicode text \N{EURO SIGN}"
print b"some utf-8 encoded bytestring \xe2\x82\xac".decode('utf-8')

tức là, nếu bạn đó là một chuỗi unicode thì hãy trong nó trực tiếp. Nếu bạn Có một bytestring thì trước tin hãy chuyển nó hát unicode.

Cài Đặt ngNn ngữ của bạn (

>>> x = eval("'Capit\\xc3\\xa1n\\n'")
>>> x
'Capit\xc3\xa1n\n'
>>> x[5]
'\xc3'
>>> len(x[5])
1
2,
>>> x = eval("'Capit\\xc3\\xa1n\\n'")
>>> x
'Capit\xc3\xa1n\n'
>>> x[5]
'\xc3'
>>> len(x[5])
1
3) Cho Biết Ngôn ngữ ạ đồng Cuối Của bạn (nế trong unicode trực tiếp Để họ thế.in Unicode trực tiếp để thay thế .

Đó là rất nhiều GIả Đ-Nh Sai Trong Câu Hỏi Của Bạn.

Bạn không cần phải thiết lập ________ 14với cài đặt ngôn ngữ của mÌnh Ngôn ngữ utf-8 hỗ trợ tất cả các ký tự unicode tức là, nó hoạt /ng NHư hiện tại.

Bạn Không Cần Giải Pháp Thay Th Hãy

>>> x = eval("'Capit\\xc3\\xa1n\\n'")
>>> x
'Capit\xc3\xa1n\n'
>>> x[5]
'\xc3'
>>> len(x[5])
1
5. Nó bạn thể bị . Cài Đặt Ngôn ngữ Chính Xácc Và / Hoặc
>>> x = eval("'Capit\\xc3\\xa1n\\n'")
>>> x
'Capit\xc3\xa1n\n'
>>> x[5]
'\xc3'
>>> len(x[5])
1
4Envvar là Đủ. NGOÀi ra, nếu bạn cần họ thế ________ 17thì hÃy

________ 21không liên Quan Đến Cài Đặt Ngôn ngữ Của Bạn Và Tới

>>> x = eval("'Capit\\xc3\\xa1n\\n'")
>>> x
'Capit\xc3\xa1n\n'
>>> x[5]
'\xc3'
>>> len(x[5])
1
4. GIả ĐịNH CủA BạN RằNG CÀi ĐặT
>>> x = eval("'Capit\\xc3\\xa1n\\n'")
>>> x
'Capit\xc3\xa1n\n'
>>> x[5]
'\xc3'
>>> len(x[5])
1
4 Sẽ Thay Bạn nên kiểm tra
>>> x.decode('utf-8')
u'Capit\xe1n\n'
5thay thế.

________ 21khônc Đan sử dụng Khia bạn trong ra bảng Điều khiếu. Nóó thể đc sử dụng lào

$ python2 -c'import sys; print(sys.stdout.encoding)'
UTF-8
$ python2 -c'import sys; print(sys.stdout.encoding)' | cat
None
$ PYTHONIOENCODING=utf8 python2 -c'import sys; print(sys.stdout.encoding)' | cat
utf8

Đừng Gọi Điện Thoại

>>> x.decode('utf-8')
u'Capit\xe1n\n'
8; nóó thể lÀm hỏng d GHI ________ 21 ĐượC Xem thêmm, Trí dẫn trong câu trả lời của @ mesilliac.

10 hữu ích 0 bình luận chia sẻ 0 bình luận chia sẻ