Menapis Aksara Unikod Melebihi Pengekodan UTF-8 3-Byte
Pelaksanaan MySQL dalam versi 5.1 mempunyai had, di mana ia hanya menyokong 3- bait UTF-8 aksara. Untuk mengendalikan aksara 4-bait dengan berkesan, panduan ini menyediakan penyelesaian untuk menapis atau menggantikan aksara unikod yang mungkin mengambil masa lebih daripada 3 bait.
Penyelesaian menggunakan Ungkapan Biasa:
Satu pendekatan ialah menggunakan ungkapan biasa untuk mengesan aksara di luar julat u0000-uD7FF dan uE000-uFFFF yang dibenarkan. Menggunakan modul semula, anda boleh mencipta corak seperti ini:
pattern = re.compile(u'[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE)
Untuk menapis rentetan, anda boleh menggunakan re.sub():
import re re_pattern = re.compile(u'[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE) filtered_string = re_pattern.sub(u'\uFFFD', unicode_string)
Penyelesaian Alternatif menggunakan Python:
Pilihan lain adalah untuk melelar melalui setiap aksara Unicode dalam rentetan dan menggantikan mana-mana aksara dengan pengekodan UTF-8 4-bait dengan aksara gantian uFFFD:
def filter_using_python(unicode_string): return u''.join( uc if uc < u'\ud800' or u'\ue000' <= uc <= u'\uffff' else u'\ufffd' for uc in unicode_string )
Perbandingan Prestasi:
Untuk membandingkan prestasi penyelesaian ini, ujian telah dijalankan menggunakan cProfile. Penyelesaian berasaskan ungkapan biasa mengatasi penyelesaian berasaskan Python dengan ketara.
Kesimpulan:
Penyelesaian ungkapan biasa yang dicadangkan menyediakan cara yang cekap dan boleh dipercayai untuk menapis atau menggantikan unikod aksara yang melebihi pengekodan UTF-8 3-bait dalam Python. Ia amat berfaedah untuk situasi di mana pengoptimuman kelajuan adalah kritikal.
Atas ialah kandungan terperinci Bagaimana Menapis Aksara Unikod Melebihi Pengekodan UTF-8 3-Bait dalam MySQL 5.1?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!