2010-02-04 41 views
12

Tôi đang cố gắng thay thế các ký tự dòng mới trong chuỗi unicode và dường như thiếu một số mã ma thuật.Thay thế dòng mới bằng chuỗi Unicode

Ví dụ cụ thể của tôi là tôi đang làm việc trên AppEngine và cố gắng đặt tiêu đề từ các trang HTML vào một mẫu db.StringProperty() trong mô hình của tôi.

Vì vậy, tôi làm điều gì đó như:

link.title = unicode(page_title,"utf-8").replace('\n','').replace('\r','') 

và tôi nhận được:

Property title is not multi-line 

Có mã khác tôi nên sử dụng cho thay thế?

+0

In 'repr()' của 'page_title' và xem ký tự đặc biệt nào chứa nó. –

Trả lời

17

Hãy thử ''.join(unicode(page_title, 'utf-8').splitlines()). splitlines() nên để cho thư viện chuẩn xử lý tất cả các ngắt dòng Unicode có thể điên, và sau đó bạn chỉ cần nối chúng lại với nhau bằng chuỗi rỗng để có phiên bản một dòng.

+1

Cảm ơn! Điều đó làm việc như một nhà vô địch. –

-1

Sẽ hữu ích khi in repr() của trang_title được xem là nhiều dòng, nhưng ứng viên hiển nhiên sẽ là '\r'.

+0

Tôi đã cập nhật ví dụ của mình để bao gồm chi phí vận chuyển (cùng kết quả). –

8

Python sử dụng các ký tự cho tách trong unicode.splitlines():

  • U + 000A ĐƯỜNG DÂY FEED (\ n)
  • U + 000D VẬN CHUYỂN RETURN (\ r)
  • U + 001C FILE SEPARATOR
  • U + 001D GROUP SEPARATOR
  • U + 001E RECORD SEPARATOR
  • U + 0085 TIẾP THEO DÒNG
  • U + 2028 ĐƯỜNG DÂY SEPARATOR
  • U + 2029 ĐOẠN SEPARATOR

Như Hank nói, sử dụng splitlines() sẽ cho phép Python chăm sóc của tất cả các chi tiết cho bạn, nhưng nếu bạn cần phải làm điều đó bằng tay, thì đây phải là danh sách đầy đủ.

+0

Điều đó hữu ích. Nhưng trông giống như 'splitlines()' đã làm cho tôi. –

+0

Không phải lo lắng; Tôi đã tìm ra 'splitlines()' là câu trả lời đúng; Đây chỉ là trong trường hợp bạn thực sự cần danh sách. –

Các vấn đề liên quan