🐍

Python小技:文字列から特定の文字コードに含まれない文字を削除する

2020/12/04に公開

文字列 string から、特定の文字コード(サンプルではCP932)に 含まれない 文字を削除するためには以下のようにするのがおそらく簡単です。

string = string.encode('cp932', errors='ignore').decode('cp932')

要するに、以下の処理をしています。

  1. 最初に文字列を CP932 でエンコードします。この際エンコードできない文字を削除するために encode メソッドに errors='ignore' をオプションとして渡します。
  2. 出来上がったバイト列を再度デコードして文字列に直します。

補足: 実験した環境

> 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

Discussion