最近で(TracのXmlRpcPluginメンテナ)は正規表現という事実を通知されています上記のように、Pythonのナロービルドのサロゲートペアを削除します(th:comment:13:ticket:11050参照)。代わりの方法は、次の正規表現を使用することです(th:changeset:13729参照)。
_illegal_unichrs = [(0x00, 0x08), (0x0B, 0x0C), (0x0E, 0x1F),
(0x7F, 0x84), (0x86, 0x9F),
(0xFDD0, 0xFDDF), (0xFFFE, 0xFFFF)]
if sys.maxunicode >= 0x10000: # not narrow build
_illegal_unichrs.extend([(0x1FFFE, 0x1FFFF), (0x2FFFE, 0x2FFFF),
(0x3FFFE, 0x3FFFF), (0x4FFFE, 0x4FFFF),
(0x5FFFE, 0x5FFFF), (0x6FFFE, 0x6FFFF),
(0x7FFFE, 0x7FFFF), (0x8FFFE, 0x8FFFF),
(0x9FFFE, 0x9FFFF), (0xAFFFE, 0xAFFFF),
(0xBFFFE, 0xBFFFF), (0xCFFFE, 0xCFFFF),
(0xDFFFE, 0xDFFFF), (0xEFFFE, 0xEFFFF),
(0xFFFFE, 0xFFFFF), (0x10FFFE, 0x10FFFF)])
_illegal_ranges = ["%s-%s" % (unichr(low), unichr(high))
for (low, high) in _illegal_unichrs]
_illegal_xml_chars_RE = re.compile(u'[%s]' % u''.join(_illegal_ranges))
p.s.それらが何であるかを説明しているthis post on surrogatesを参照してください。
更新0x0D
と一致しないように(置き換えて)valid XML characterです。
Pythonの最大Unicodeコードポイントは、コンパイル時にどのように設定されたかによって異なります。 'sys.maxunicode'をチェックしてください。 – u0b34a0f6ae
あなたはそうです。私はそれがさらに複雑だと思う。 – itsadok
私のマシンでは、この正規表現を使用して2.3mbの文字列を処理するのに0.34秒かかります。それは私にとってかなり速いようです。 –