3 バイト UTF-8 エンコーディングを超える Unicode 文字のフィルタリング
バージョン 5.1 の MySQL 実装には制限があり、3 バイトのみをサポートします。バイトの UTF-8 文字。 4 バイト文字を効果的に処理するために、このガイドでは、3 バイトを超える可能性のある Unicode 文字をフィルタリングまたは置換する解決策を提供します。
正規表現を使用した解決策:
1 つの方法は、正規表現を利用して、u0000 ~ uD7FF および uE000 ~ uFFFF の許容範囲外の文字を検出することです。 re モジュールを使用すると、次のようなパターンを作成できます。
pattern = re.compile(u'[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE)
文字列をフィルターするには、 re.sub() を使用できます:
import re re_pattern = re.compile(u'[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE) filtered_string = re_pattern.sub(u'\uFFFD', unicode_string)
代替ソリューションPython を使用する:
もう 1 つのオプションは、文字列内の各 Unicode 文字を反復処理し、4 バイトの UTF-8 エンコードの文字を置換文字 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 )
パフォーマンスの比較:
これらのソリューションのパフォーマンスを比較するために、cProfile を使用してテストが実施されました。正規表現ベースのソリューションは、Python ベースのソリューションよりもパフォーマンスが大幅に優れていました。結論:
提案された正規表現ソリューションは、Unicode をフィルタリングまたは置換するための効率的かつ信頼性の高い方法を提供します。 Python の 3 バイト UTF-8 エンコーディングを超える文字。これは、速度の最適化が重要な状況で特に有益です。以上がMySQL 5.1 で 3 バイトの UTF-8 エンコーディングを超える Unicode 文字をフィルタリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。