文字列 string
から、特定の文字コード(サンプルではCP932)に 含まれない 文字を削除するためには以下のようにするのがおそらく簡単です。
string = string.encode('cp932', errors='ignore').decode('cp932')
要するに、以下の処理をしています。
- 最初に文字列を CP932 でエンコードします。この際エンコードできない文字を削除するために
encode
メソッドにerrors='ignore'
をオプションとして渡します。 - 出来上がったバイト列を再度デコードして文字列に直します。
補足: 実験した環境
> py --version --version
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)]
> py
>>> string = "Some string \u200b" # \u200bはCP932の範囲外
>>> print(len(string))
13
>>> string = string.encode('cp932', errors='ignore').decode('cp932')
>>> print(string)
Some string
>>> print(len(string))
12