Hướng dẫn python un-escape string python 3 - python un-Escape chuỗi python 3

Tôi có một số chuỗi trốn thoát cần phải được không được thanh toán. Tôi muốn làm điều này trong Python.

Ví dụ, trong Python 2.7 tôi có thể làm điều này:

>>> "\\123omething special".decode('string-escape')
'Something special'
>>> 

Làm cách nào để làm điều đó trong Python 3? Điều này không hoạt động:

>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>> 

Mục tiêu của tôi là có thể lấy một chuỗi như thế này:

s\000u\000p\000p\000o\000r\000t\000@\000p\000s\000i\000l\000o\000c\000.\000c\000o\000m\000

Và biến nó thành:

""

Sau khi tôi thực hiện chuyển đổi, tôi sẽ thăm dò xem chuỗi tôi có được mã hóa trong UTF-8 hoặc UTF-16.

Hướng dẫn python un-escape string python 3 - python un-Escape chuỗi python 3

Siêu bão

4.7465 Huy hiệu vàng20 Huy hiệu bạc32 Huy hiệu Đồng5 gold badges20 silver badges32 bronze badges

Đã hỏi ngày 11 tháng 2 năm 2013 lúc 20:37Feb 11, 2013 at 20:37

3

Thay vào đó, bạn sẽ phải sử dụng

>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>> 
5:

>>> b"\\123omething special".decode('unicode_escape')

Nếu bạn bắt đầu với một đối tượng

>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>> 
6 thay thế (tương đương với unicode Python 2.7), bạn sẽ cần phải mã hóa thành byte trước, thì hãy giải mã bằng
>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>> 
5.

Nếu bạn cần byte là kết quả cuối cùng, bạn sẽ phải mã hóa lại thành một mã hóa phù hợp (ví dụ

>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>> 
8, nếu bạn cần lưu giữ các giá trị byte theo nghĩa đen; 256 điểm Unicode đầu tiên Bản đồ 1 trên-1).

Ví dụ của bạn thực sự là dữ liệu UTF-16 với Escapes. Giải mã từ

>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>> 
5, trở lại
s\000u\000p\000p\000o\000r\000t\000@\000p\000s\000i\000l\000o\000c\000.\000c\000o\000m\000
0 để bảo tồn các byte, sau đó từ
s\000u\000p\000p\000o\000r\000t\000@\000p\000s\000i\000l\000o\000c\000.\000c\000o\000m\000
1 (UTF 16 Little Endian không có BOM):

>>> value = b's\\000u\\000p\\000p\\000o\\000r\\000t\\000@\\000p\\000s\\000i\\000l\\000o\\000c\\000.\\000c\\000o\\000m\\000'
>>> value.decode('unicode_escape').encode('latin1')  # convert to bytes
b's\x00u\x00p\x00p\x00o\x00r\x00t\x00@\x00p\x00s\x00i\x00l\x00o\x00c\x00.\x00c\x00o\x00m\x00'
>>> _.decode('utf-16-le') # decode from UTF-16-LE
''

Đã trả lời ngày 11 tháng 2 năm 2013 lúc 20:40Feb 11, 2013 at 20:40

Martijn Pieters ♦ Martijn PietersMartijn Pieters

988K275 Huy hiệu vàng3888 Huy hiệu bạc3245 Huy hiệu Đồng275 gold badges3888 silver badges3245 bronze badges

4

Các bản đồ codec "String-escape" cũ cho các bytestrings và đã có rất nhiều cuộc tranh luận về những việc cần làm với các codec như vậy, vì vậy hiện tại nó không có sẵn thông qua các giao diện mã hóa/giải mã tiêu chuẩn.

Nhưng, mã vẫn còn đó trong C-API (như

s\000u\000p\000p\000o\000r\000t\000@\000p\000s\000i\000l\000o\000c\000.\000c\000o\000m\000
2), và điều này vẫn được tiếp xúc với Python thông qua
s\000u\000p\000p\000o\000r\000t\000@\000p\000s\000i\000l\000o\000c\000.\000c\000o\000m\000
3 và
s\000u\000p\000p\000o\000r\000t\000@\000p\000s\000i\000l\000o\000c\000.\000c\000o\000m\000
4 không có giấy tờ.

>>> import codecs
>>> codecs.escape_decode(b"ab\\xff")
(b'ab\xff', 6)
>>> codecs.escape_encode(b"ab\xff")
(b'ab\\xff', 3)

Các chức năng này trả về đối tượng

s\000u\000p\000p\000o\000r\000t\000@\000p\000s\000i\000l\000o\000c\000.\000c\000o\000m\000
5 được biến đổi, cộng với một số cho biết số byte đã được xử lý ... bạn có thể bỏ qua cái sau.

>>> value = b's\\000u\\000p\\000p\\000o\\000r\\000t\\000@\\000p\\000s\\000i\\000l\\000o\\000c\\000.\\000c\\000o\\000m\\000'
>>> codecs.escape_decode(value)[0]
b's\x00u\x00p\x00p\x00o\x00r\x00t\x00@\x00p\x00s\x00i\x00l\x00o\x00c\x00.\x00c\x00o\x00m\x00'

Đã trả lời ngày 18 tháng 4 năm 2014 lúc 9:57Apr 18, 2014 at 9:57

1

Nếu bạn muốn giải mã Str-to-STR của các chuỗi thoát, vì vậy cả đầu vào và đầu ra đều là Unicode:str-to-str decoding of escape sequences, so both input and output are Unicode:

def string_escape(s, encoding='utf-8'):
    return (s.encode('latin1')         # To bytes, required by 'unicode-escape'
             .decode('unicode-escape') # Perform the actual octal-escaping decode
             .encode('latin1')         # 1:1 mapping back to bytes
             .decode(encoding))        # Decode original encoding

Testing:

>>> string_escape('\\123omething special')
'Something special'

>>> string_escape(r's\000u\000p\000p\000o\000r\000t\000@'
                  r'\000p\000s\000i\000l\000o\000c\000.\000c\000o\000m\000',
                  'utf-16-le')
''

Đã trả lời ngày 13 tháng 11 năm 2019 lúc 2:33Nov 13, 2019 at 2:33

MestrelionmestrelionMestreLion

11.9k4 Huy hiệu vàng62 Huy hiệu bạc55 Huy hiệu Đồng4 gold badges62 silver badges55 bronze badges

3

py2

>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>> 
0

py3

>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>> 
1

Đã trả lời ngày 22 tháng 2 năm 2021 lúc 15:22Feb 22, 2021 at 15:22

SérgiosérgioSérgio

6.7481 Huy hiệu vàng46 Huy hiệu bạc51 Huy hiệu đồng1 gold badge46 silver badges51 bronze badges

2

Bạn không thể sử dụng

>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>> 
5 trên các chuỗi byte (hay đúng hơn là bạn có thể, nhưng nó không phải lúc nào cũng trả về điều tương tự như
s\000u\000p\000p\000o\000r\000t\000@\000p\000s\000i\000l\000o\000c\000.\000c\000o\000m\000
7 làm trên Python 2) - hãy cẩn thận!

Hàm này thực hiện

s\000u\000p\000p\000o\000r\000t\000@\000p\000s\000i\000l\000o\000c\000.\000c\000o\000m\000
7 bằng cách sử dụng biểu thức thông thường và logic thay thế tùy chỉnh.

>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>> 
2

Đã trả lời ngày 20 tháng 3 năm 2013 lúc 15:59Mar 20, 2013 at 15:59

Malthemalthemalthe

1.00511 huy hiệu bạc22 Huy hiệu đồng11 silver badges22 bronze badges

Ít nhất trong trường hợp của tôi, điều này tương đương:

>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>> 
3

convertutils.py:

>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>> 
4

Đã trả lời ngày 13 tháng 8 năm 2019 lúc 15:50Aug 13, 2019 at 15:50

Hướng dẫn python un-escape string python 3 - python un-Escape chuỗi python 3

Guettliguettliguettli

23.7K66 Huy hiệu vàng308 Huy hiệu bạc585 Huy hiệu Đồng66 gold badges308 silver badges585 bronze badges

Làm thế nào để bạn trốn thoát trong Python 3?

Trong các chuỗi Python, dấu gạch chéo ngược là một nhân vật đặc biệt, còn được gọi là nhân vật thoát khỏi lối thoát. Nó được sử dụng để đại diện cho một số ký tự khoảng trắng nhất định: \ \ t, là một tab, \ n, là một dòng mới và là \ r, là một sự trở lại vận chuyển. Cuối cùng, có thể được sử dụng để thoát khỏi chính nó: \ \ là nhân vật ngược dòng.the backslash “ ” is a special character, also called the “escape” character. It is used in representing certain whitespace characters: “\t” is a tab, “\n” is a new line, and “\r” is a carriage return. Finally, “ ” can be used to escape itself: “\” is the literal backslash character.

Tại sao Python thêm dấu gạch chéo ngược vào chuỗi?

Trong các chuỗi Python, dấu gạch chéo ngược "\" là một nhân vật đặc biệt, còn được gọi là nhân vật "Escape".Nó được sử dụng để thể hiện các ký tự khoảng trắng nhất định: "\ t" là một tab, "\ n" là một dòng mới và "\ r" là một sự trở lại vận chuyển.Ngược lại, tiền tố một ký tự đặc biệt với "\" biến nó thành một ký tự thông thường.used in representing certain whitespace characters: "\t" is a tab, "\n" is a newline, and "\r" is a carriage return. Conversely, prefixing a special character with "\" turns it into an ordinary character.

Làm thế nào để tôi ngừng trốn thoát trong Python?

Để biến một chuỗi bình thường thành một chuỗi thô, tiền tố chuỗi (trước khi trích dẫn) bằng R hoặc R. Đây là phương pháp được lựa chọn để khắc phục vấn đề trình tự thoát này.prefix the string (before the quote) with an r or R. This is the method of choice for overcoming this escape sequence problem.

Làm thế nào để bạn giải quyết một nhân vật trong Python?

Unescape () trong Python.Với sự trợ giúp của phương thức html.unescape (), chúng ta có thể chuyển đổi chuỗi ASCII thành tập lệnh HTML bằng cách thay thế các ký tự ASCII bằng các ký tự đặc biệt bằng cách sử dụng HTML.Phương thức thoát ().html. unescape() method, we can convert the ascii string into html script by replacing ascii characters with special characters by using html. escape() method.