최근에 우리 (Trac의 XmlRpcPlugin 테이너가) 사실을 통보 한을 그 정규 표현식 위의 코드는 파이썬의 좁은 빌드에서 서로 게이트 쌍을 제거합니다 (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입니다.
파이썬의 최대 유니 코드 코드 포인트는 컴파일시 어떻게 구성되었는지에 따라 달라지며'sys.maxunicode'를 확인하십시오. – u0b34a0f6ae
당신 말이 맞아요. 나는 그것이 훨씬 더 복잡하다고 생각한다. – itsadok
내 컴퓨터에서이 정규 표현식을 사용하여 2.3MB 문자열을 처리하는 데 0.34 초가 소요됩니다. 그것은 나에게 꽤 빠를 것 같다. –