Karakter unicode dalam rentang \u0000-\uD7FF dan \uE000-\uFFFF akan memiliki penyandian 3 byte (atau kurang) dalam UTF8. Rentang \uD800-\uDFFF adalah untuk multibyte UTF16. Saya tidak tahu python, tetapi Anda harus dapat menyiapkan ekspresi reguler untuk mencocokkan di luar rentang tersebut.
pattern = re.compile("[\uD800-\uDFFF].", re.UNICODE)
pattern = re.compile("[^\u0000-\uFFFF]", re.UNICODE)
Edit menambahkan Python dari skrip Denilson Sá di badan pertanyaan:
re_pattern = re.compile(u'[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE)
filtered_string = re_pattern.sub(u'\uFFFD', unicode_string)