Hướng dẫn invalid escape sequence python - Python trình tự thoát không hợp lệ

Stack Overflow for Teams is moving to its own domain! When the migration is complete, you will access your Teams at stackoverflowteams.com, and they will no longer appear in the left sidebar on stackoverflow.com.stackoverflowteams.com, and they will no longer appear in the left sidebar on stackoverflow.com.

Check your email for updates.

Chuyển đến nội phân

Trình Duyệt nào Không CNn Đan Hỗ trợ nữa.

Hãy nâng cấp lênn microsoft ed

Ký tự không hợp lệ và quy tắc thoát hiểm

  • Bài viết
  • 26/07/2022
  • 2 Phú

Trong bài viết nào

Áp dụng cho: SQL Server (tất cả các phiên bản được hỗ trợ) Cơ sở dữ liệu Azure SQL Azure SQL được quản lý SQL Server (all supported versions) Azure SQL Database Azure SQL Managed Instance

Bài viết này mô tả cách các ký tự XML không hợp lệ được xử lý bởi mệnh đề XML và liệt kê các quy tắc thoát cho các ký tự không hợp lệ trong tên XML.

Cho xml và các ký tự không hợp lệ

SQL Server nhập các ký tự XML không hợp lệ khi chúng được trả về trong các truy vấn XML không sử dụng Chỉ thị loại.

Mặc dù các trình phân tích cú pháp phù hợp XML 1.0 đưa ra các lỗi phân tích cú pháp bất kể các ký tự này có được thu nhập hay không, hình thức được cung cấp được liên kết tốt hơn với XML 1.1. Hình thức có được có khả năng được liên kết tốt hơn với các phiên bản trong tương lai của tiêu chuẩn XML. Ngoài ra, nó làm cho việc gỡ lỗi đơn giản hơn, bởi vì điểm mã của ký tự không hợp lệ trở nên hiển thị.

Đối với người dùng các công cụ XML, không cần giải quyết, vì trình phân tích cú pháp XML sẽ thất bại tại điểm xảy ra các ký tự không hợp lệ trong luồng dữ liệu. Nếu bạn sử dụng các công cụ không phải XML, thay đổi này có thể yêu cầu bạn cập nhật logic lập trình của mình để tìm kiếm các ký tự này dưới dạng các giá trị được hưởng.

Các ký tự không gian trắng sau đây được tham gia khác nhau trong các truy vấn XML để duy trì sự hiện diện của chúng thông qua việc vấp ngã tròn:

  • Trong nội dung phần tử và thuộc tính: hex(0D) (trả về vận chuyển)

  • Trong nội dung thuộc tính: hex(09) (tab), hex(0A) (nguồn cấp dữ liệu)

Các ký tự này được bảo tồn trong đầu ra và trình phân tích cú pháp sẽ không bình thường hóa chúng.

Quy tắc thoát

Tên máy chủ SQL có chứa các ký tự không hợp lệ trong các tên XML, chẳng hạn như không gian, được dịch thành tên XML theo cách mà các ký tự không hợp lệ được dịch thành mã hóa thực thể số thoát.

Chỉ có hai ký tự không alphetic có thể xảy ra trong tên XML: Đại tràng (:) và dấu gạch dưới (_). Bởi vì đại tràng đã được dành riêng cho các không gian tên, gạch dưới được chọn làm nhân vật thoát. Sau đây là các quy tắc thoát được sử dụng để mã hóa:

  • Bất kỳ ký tự UCS-2 nào không phải là ký tự tên XML hợp lệ, theo thông số kỹ thuật XML 1.0, được thoát ra là _xHHHH_. HHHH là viết tắt của mã UCS-2 hình lục giác bốn chữ số cho ký tự theo thứ tự bit quan trọng nhất. Ví dụ: tên bảng Order Details được mã hóa là

    <row xmlns:namespace="namespace-urn" namespace:a="1"/>
    
    0.

  • Các ký tự không phù hợp với vương quốc UCS-2 (bổ sung UCS-4 của phạm vi U+00010000 đến U+0010FFFF) được mã hóa là

    <row xmlns:namespace="namespace-urn" namespace:a="1"/>
    
    1.
    <row xmlns:namespace="namespace-urn" namespace:a="1"/>
    
    2 là viết tắt của mã hóa UCS-4 của HexAdeCimal tám chữ số của ký tự, nếu dưới chế độ tương thích ngược SQL Server 2000. Mặt khác, các ký tự được mã hóa là
    <row xmlns:namespace="namespace-urn" namespace:a="1"/>
    
    3, để phù hợp với tiêu chuẩn ISO.

  • Nhân vật dấu gạch dưới không phải trốn thoát trừ khi nó được theo sau bởi nhân vật

    <row xmlns:namespace="namespace-urn" namespace:a="1"/>
    
    4. Ví dụ: tên bảng
    <row xmlns:namespace="namespace-urn" namespace:a="1"/>
    
    5 không được mã hóa.

  • Đại tràng trong định danh không thoát ra. Kết quả là, phần tử không gian tên và tên thuộc tính có thể được tạo bởi truy vấn cho XML. Ví dụ: truy vấn sau đây tạo thuộc tính không gian tên có dấu hai chấm trong tên:

    SELECT 'namespace-urn' as 'xmlns:namespace',
     1 as 'namespace:a'
    FOR XML RAW;
    

    Truy vấn tạo ra kết quả này:

    <row xmlns:namespace="namespace-urn" namespace:a="1"/>
    

    Với xmlnamespace là cách được khuyến nghị để thêm không gian tên XML.

Xem thêm

  • Cho XML (SQL Server)

Phản HồI

Gửi và xem ý kiến ​​ph

Chúng ta nên xem lại những gì chúng ta muốn làm (nếu bất cứ điều gì) về các chuỗi thoát không hợp lệ.

Đối với Python 3.8, việc không dùng nữa đã được chuyển đổi thành một cú pháp có thể nhìn thấy theo mặc định. Ý định là biến nó thành một cú pháp trong Python 3.9.

Điều này một lần dường như là một ý tưởng hợp lý và vô hại đối với tôi; Tuy nhiên, tôi đã sử dụng 3,8 beta rất nhiều trong một tháng và không còn nghĩ rằng đó là một ý tưởng tốt. Các cảnh báo sẽ tăng lên thường xuyên, thường là do các gói của bên thứ ba (như tài liệu và chai) mà người dùng không thể dễ dàng làm bất cứ điều gì. Và trong các bản demo trực tiếp và hội thảo sinh viên, nó đặc biệt mất tập trung.

Bây giờ tôi nghĩ rằng phương pháp chữa bệnh của chúng tôi tồi tệ hơn bệnh. Nếu mã hiện có một chuỗi không raw với '\ latex', chúng ta có thực sự cần python để yelp về nó (với 3,8) hoặc từ chối hoàn toàn (với 3,9) không? Nếu ai đó không thể nhớ chính xác những nhân vật đặc biệt nào cần được thoát ra, chúng ta có thực sự cần phải ngăn họ theo dõi trong phiên phân tích dữ liệu không? Chúng ta có thực sự cần từ chối nghệ thuật ASCII trong Docstrings: `-------> Trường hợp đặc biệt '?

IIRC, vấn đề ban đầu cần giải quyết là dương tính giả chứ không phải là phủ định sai: fileName = '.. \ đào tạo \ new_memo.doc'. Các cảnh báo và lỗi không làm (và có khả năng không thể làm gì) bất cứ điều gì về điều này.

Nếu Python 3,8 đi ra ngoài, chúng tôi có thể đấm vào mũi người dùng và gần như không có lợi từ nó. ISTM Đây là một công việc tốt nhất còn lại cho linters. Trong một thời gian rất dài, Python đã chấp nhận những thứ như 'more \ latex markup' và đã âm thầm chuyển đổi nó thành 'more \ latex markup'. Bây giờ tôi nghĩ rằng nó nên duy trì như vậy. Vấn đề này trong bản phát hành beta 3,8 là một sự khó chịu gần như hàng ngày đối với tôi và khách hàng của tôi. Tùy thuộc vào cách bạn sử dụng Python, điều này có thể không ảnh hưởng đến bạn hoặc nó có thể phát sinh nhiều lần mỗi ngày.

Raymond

P.S. Trước khi trả lời, sẽ là một bài tập hữu ích để suy nghĩ về việc bạn có nhớ chính xác những nhân vật nào phải được thoát ra hay bạn thường xuyên đặt một dấu gạch chéo ngược khi bạn không chắc chắn. Sau đó, xem: https://bugs.python.org/issue32912

Hiển thị câu trả lời theo ngày