Tôi có một ứng dụng Django nhận dữ liệu tweet từ API của Twitter và lưu nó vào cơ sở dữ liệu MySQL. Theo như tôi biết (tôi vẫn đang tìm kiếm những điểm tốt hơn về mã hóa ký tự) Tôi đang sử dụng UTF-8 ở mọi nơi, bao gồm mã hóa và đối chiếu MySQL, hoạt động tốt trừ khi một tweet chứa Biểu tượng cảm xúc ký tự Tôi hiểu sử dụng mã hóa bốn byte. Đang cố gắng để cứu họ tạo ra những lời cảnh báo sau đây từ Django:Làm cách nào để lọc các ký tự Emoji từ đầu vào của tôi để tôi có thể lưu trong MySQL <5.5?
/home/biggleszx/.virtualenvs/myvirtualenv/lib/python2.6/site-packages/django/db/backends/mysql/base.py:86 : Cảnh báo: chuỗi giá trị sai: '\ xF0 \ x9F \ x98 \ xAD tôi ...' cho cột 'text' ở hàng 1 trở self.cursor.execute (query, args)
tôi bằng cách sử dụng MySQL 5.1, do đó, sử dụng utf8mb4 không phải là một tùy chọn trừ khi tôi nâng cấp lên 5.5, mà tôi không muốn chỉ (cũng từ những gì tôi đã đọc, hỗ trợ của Django cho điều này không phải là khá sẵn sàng sản xuất, mặc dù điều này có thể không còn chính xác nữa). Tôi cũng đã thấy folks tư vấn cho việc sử dụng BLOB thay vì TEXT trên các cột bị ảnh hưởng, mà tôi cũng không muốn làm như tôi thấy nó sẽ làm hại hiệu suất.
Câu hỏi của tôi là, giả sử tôi không quá lo lắng về việc bảo toàn 100% nội dung tweet, có cách nào tôi có thể lọc ra tất cả ký tự Emoji và thay thế chúng bằng ký tự không phải đa byte, chẳng hạn như đáng kính WHITE MEDIUM SMALL SQUARE (U+25FD)
? Tôi nghĩ đây là cách dễ nhất để lưu dữ liệu đó cho thiết lập hiện tại của tôi, mặc dù nếu tôi thiếu một giải pháp rõ ràng khác, tôi rất muốn nghe nó!
FYI, tôi đang sử dụng kho Python 2.6.5 trên Ubuntu 10.04.4 LTS. sys.maxunicode
là 1114111, vì vậy đây là bản dựng UCS-4.
Cảm ơn bạn đã đọc.
UTF8 có thể mã hóa phi Các ký tự BMP – SLaks
@SLaks: Có, nhưng bộ ký tự MySQL 'utf8' không thể lưu trữ chúng vì nó chỉ sử dụng 3 byte. –