Hướng dẫn how do you handle special characters in a string python? - làm cách nào để bạn xử lý các ký tự đặc biệt trong chuỗi python?

Python sẽ kiểm tra dòng thứ nhất hoặc thứ hai để biết thông số kỹ thuật mã hóa giống như Emacs/VIM.

Show

Chính xác hơn, dòng thứ nhất hoặc thứ hai phải khớp với biểu thức chính quy "mã hóa [: =] \ s*([-\ w.]+)". Nhóm đầu tiên của biểu thức này sau đó được hiểu là tên mã hóa. Nếu mã hóa không được biết đến Python, một lỗi được nêu ra trong quá trình biên dịch.the first or second line must match the regular expression "coding[:=]\s*([-\w.]+)". The first group of this expression is then interpreted as encoding name. If the encoding is unknown to Python, an error is raised during compilation.

Nguồn: PEP 263

(Một BOM cũng sẽ làm cho Python giải thích nguồn là UTF-8.

Tôi muốn giới thiệu, bạn sử dụng cái này trên .decode('utf8')

# -*- encoding: utf-8 -*-
special_char_string = u"äöüáèô"

Trong mọi trường hợp, special_char_string sau đó sẽ chứa một đối tượng unicode, không còn là str. Như bạn có thể thấy, cả hai đều tương đương về mặt ngữ nghĩa:

>>> u"äöüáèô" == "äöüáèô".decode('utf8')
True

Và điều ngược lại:

>>> u"äöüáèô".encode('utf8')
'\xc3\xa4\xc3\xb6\xc3\xbc\xc3\xa1\xc3\xa8\xc3\xb4'
>>> "äöüáèô"
'\xc3\xa4\xc3\xb6\xc3\xbc\xc3\xa1\xc3\xa8\xc3\xb4'

Tuy nhiên, có một sự khác biệt về kỹ thuật: nếu bạn sử dụng U "thứ gì đó", nó sẽ hướng dẫn trình phân tích cú pháp rằng có một bản theo nghĩa đen của Unicode, nó sẽ nhanh hơn một chút.


Ký tự thoát

Để chèn các ký tự là bất hợp pháp trong một chuỗi, hãy sử dụng một ký tự thoát.

Một nhân vật thoát là một dấu gạch chéo ngược

>>> u"äöüáèô" == "äöüáèô".decode('utf8')
True
0 theo sau là nhân vật bạn muốn chèn.

Một ví dụ về một ký tự bất hợp pháp là một trích dẫn kép bên trong một chuỗi được bao quanh bởi các trích dẫn kép:

Thí dụ

Bạn sẽ gặp lỗi nếu bạn sử dụng dấu ngoặc kép bên trong một chuỗi được bao quanh bởi các trích dẫn kép:

txt = "Chúng tôi là người được gọi là" người Viking "từ phía bắc."

Hãy tự mình thử »

Để khắc phục sự cố này, hãy sử dụng ký tự thoát

>>> u"äöüáèô" == "äöüáèô".decode('utf8')
True
1:

Thí dụ

Bạn sẽ gặp lỗi nếu bạn sử dụng dấu ngoặc kép bên trong một chuỗi được bao quanh bởi các trích dẫn kép:

txt = "Chúng tôi là người được gọi là" người Viking "từ phía bắc."

Hãy tự mình thử »

Để khắc phục sự cố này, hãy sử dụng ký tự thoát

>>> u"äöüáèô" == "äöüáèô".decode('utf8')
True
1:

Nhân vật thoát cho phép bạn sử dụng trích dẫn kép khi bạn thường không được phép: TXT = "Chúng tôi là người được gọi là \" Vikings \ "từ phía bắc."Các nhân vật thoát khác được sử dụng trong Python:
Mã sốKết quảThử nó
\ 'Trích dẫn duy nhấtThử nó
\ 'Trích dẫn duy nhấtThử nó
\ 'Trích dẫn duy nhấtThử nó
\ 'Trích dẫn duy nhấtThử nó
\ 'Trích dẫn duy nhấtThử nó
\ 'Trích dẫn duy nhất
Thử nó "\\Thử nó
\ 'Trích dẫn duy nhấtThử nó



Các hoạt động chuỗi trên mảng chuỗi chứa các chuỗi có dấu &/hoặc ký tự đặc biệt cùng với các chuỗi ASCII thông thường có thể khiến cho sự khó chịu

Những ngày này tôi tham gia vào tự động hóa web/di động. Một ngày khác, tôi đã có một thử thách để phân tích tất cả các chuỗi trên trang cho một thư viện tự động hóa chung mà tôi đang viết.

Vì tôi được cho là viết một thư viện chung để phân tích tất cả các chuỗi trên trang, tôi không có sự sang trọng của việc sử dụng ID cho điều khiển/thành phần cụ thể trên trang. Vì vậy, tôi đã sử dụng XPath____

>>> u"äöüáèô" == "äöüáèô".decode('utf8')
True
2 đáng tin cậy cho các chuỗi phân tích cú pháp trong một trang ứng dụng Android. Điều này sẽ trích xuất tất cả các thuộc tính văn bản trên trang là một giải pháp đủ tốt cho tôi.

Vì giải pháp rất dễ dàng, tôi thấy khó tin rằng mã đã xử lý tất cả các trường hợp cạnh. Để xóa những nghi ngờ của mình, tôi đã thử nghiệm nó trên các ứng dụng khác nhau với các đầu vào khác nhau, cho đến khi tôi đạt được một khối đường trong đó trang đang trả lại một hỗn hợp các chuỗi có dấu, các chuỗi chứa các ký tự đặc biệt và chuỗi ASCII thông thường. Đây là cách mảng trông như thế nào

strs = ["hell°", "hello", "tromsø", "boy", "stävänger", "ölut", "world"]

Nếu bạn đã đạt được thử thách tương tự, hãy đọc cho giải pháp.

Các chuỗi có các ký tự có dấu hoặc đặc biệt là các chuỗi Unicode trong khi một ASCII thường xuyên. Vì vậy, để xử lý các chuỗi unicode là chuỗi ASCII thông thường, người ta phải chuyển đổi chuỗi Unicode thành ASCII. (Đối với một lịch sử trên Unicode, hãy đọc một bài viết chi tiết)

Để chuyển đổi Unicode thành ASCII; Người ta phải mã hóa chuỗi Unicode thành UTF-8utf-8

Đây là cách bạn làm trong Python

text = text.encode(‘utf-8’)

Đơn giản là nó !!

Nhưng chờ bạn cần phải loại bỏ các ký tự thoát bổ sung để thực hiện các hoạt động chuỗi. Đây là cách bạn có thể loại bỏ những thứ đó

import redef extract_word(text):
print "Input Text::{}".format(text)
regex = r"(\w|\s)*"
matches = re.finditer(regex, text, re.DOTALL)
newstr = ''
for matchNum, match in enumerate(matches):
matchNum = matchNum + 1
newstr = newstr + match.group()
print "Output Text::{}".format(newstr)
return newstr

Với chuỗi được trả về, bây giờ bạn tốt để đi và thực hiện các hoạt động chuỗi khác trên mảng.

(Nếu điều này đã giúp các bạn, hãy cho tôi biết trong phần bình luận…)