2015-03-26 1 views
1

я получил файл с открытым текстом, а некоторые представлениями Юникода литералов, такими какКак преобразовать строковое представление литералов в формате unicode из файла, в реальные литералы в Unicode, используя python 3?

STRING_LITERAL2 = '"' (([^\x22\x5C\xA\xD]) | '\' [tbnrf\"'])* '"' 

Мне нужно интерпретировать эти представления в реальные литералы и использовать их в регулярном выражении. Проблема, если я просто прочитал их, я получаю

str_lit2 = ('\'"\' (([^\\x22\\x5C\\xA\\xD]) | \'\\\' [tbnrf\\"\'])* \'"\'' 

import.re и пакет питона не может интерпретировать эти литералов.

я могу найти конкретные представления, используя re.sub("\\\\x",...), но если я хочу, чтобы заменить их re.sub("\\\\x","\\x".encode().decode('unicode_escape'), str_lit2) - сказать это настоящие литералы - я получаю следующее сообщение об ошибке:

UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position 0-1: truncated \xXX escape 

Так как я могу преобразовать эти представитель вереницы Unicode литералы в реальные литералы? Конечно, только для python3, потому что мне нужно использовать это.

Приветствия Meldamos

ответ

0

Все шестнадцатеричные символы включают все попадают в плоскости US_ASCII, так как ни один из них не имеют их наиболее значительный бит. Например, \x22 эквивалентен котировке Unicode/ASCII ". Аналогично \5c эквивалентен Unicode/ASCII \.

Без дальнейших разъяснений от вас, я полагаю, вы перекодировали обычные кодовые точки ASCII.

+0

Спасибо за ваш ответ, но я не вижу смысла в том, чтобы сказать мне это. В настоящее время я пытаюсь проанализировать определения нотации W3C Prov-N в регулярное выражение, чтобы токенизировать документ происхождения. Но для чего вам нужна эта информация? Моя проблема имеет какое-то отношение к различию между строковым представлением и действительно литералом и как преобразовать его в другой. Может быть, есть другие идеи или решения? – Meldamos