2015-10-15 5 views
1

Использование input() выполняет обратную косую черту как буквенную обратную косую черту, поэтому я не могу разобрать строковый ввод с помощью unicode.ввод() и разбор синтаксического выражения в формате unicode

Что я имею в виду:

Оклейка строки как "\uXXXX\uXXXX\uXXXX" в input() вызов станет истолковано как "\\uXXXX\\uXXXX\\uXXXX" но я хочу прочитать \u как один символ вместо двух отдельных символов.

Кто-нибудь знает, как и если возможно, чтобы это произошло?

Edit: Я принимаю вход, как указано выше, и преобразования его в ASCII, например, как показано ниже ..

import unicodedata 

def Reveal(unicodeSol): 
    solution = unicodedata.normalize('NFKD', unicodeSol).encode('ascii', 'ignore') 
    print(solution) 

while(True): 
    UserInput = input("Paste Now: ") 
    Reveal(UserInput) 

За ответом я отметил, правильное решение будет:

import unicodedata 
import ast 

def Reveal(unicodeSol): 
    solution = unicodedata.normalize('NFKD', unicodeSol).encode('ascii', 'ignore') 
    print(solution) 

while(True): 
    UserInput = ast.literal_eval('"{}"'.format(input("Paste Now: "))) 
    Reveal(UserInput) 
+0

Это обратная косая черта. – interjay

+0

Какой код вы используете для печати строки? Прошу показать сеанс вывода или интерпретатора. – Nayuki

+0

input() не выполняет никакого специального анализа escape-последовательностей afaik, он просто возвращает буквально то, что пользователь набрал. Что бы вы хотели, чтобы (например) пользователь ввел неверную последовательность эвакуации? Есть способ решить эту проблему здесь: http://stackoverflow.com/questions/4020539/process-escape-sequences-in-a-string-in-python – Hammerite

ответ

1

Если вы может быть уверен, что вход не будет содержать кавычки, вы можете преобразовать вход в строковое литеральное представление, добавив кавычки в обоих концах, а затем используйте ast.literal_eval(), чтобы оценить его в строке. Пример -

import ast 
inp = input("Input : ") 
res = ast.literal_eval('"{}"'.format(inp)) 

Если вход может содержать кавычки, вы можете заменить двойные кавычки с r'\"' перед вычислением с использованием ast.literal_eval.