Как напечатать строку со специальными символами с двойным обратным символом sh (например, \\ xe7) в Python - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть строка (полученная из запроса HTML веб-страницы), в которой есть специальные символы:

'Dimarts, 10 Mar\\xe7 2020'

Если я распечатаю эту строку, она правильно экранируется от двойного backsla sh и печатает только одно:

Dimarts, 10 Mar\xe7 2020

Но я хотел бы напечатать реальный символ, то есть символ 92 = ç

Dimarts, 10 Març 2020

Я пытался заменить двойную обратную косую черту sh с одним или даже без выхода с библиотекой html, без удачи. Если я вручную устанавливаю новую переменную с текстом, а затем печатаю ее, она работает:

print('Original: ', repr(text))
print('Direct  : ', text)
print('Option 1: ', text.replace('\\\\', '\\'))
print('Option 2: ', text.replace(r'\\', '\\'))
print('Option 3: ', text.replace(r'\\', chr(92)))
print('Option 4: ', text.replace('\\', chr(92)))
print('Option 5: ', html.unescape(text))
text = 'Dimarts, 10 Mar\xe7 2020'
print('Manual:   ', text)

И результат никогда не будет таким, как ожидалось:

Original:  'Dimarts, 10 Mar\\xe7 2020'
Direct  :  Dimarts, 10 Mar\xe7 2020
Option 1:  Dimarts, 10 Mar\xe7 2020
Option 2:  Dimarts, 10 Mar\xe7 2020
Option 3:  Dimarts, 10 Mar\xe7 2020
Option 4:  Dimarts, 10 Mar\xe7 2020
Option 5:  Dimarts, 10 Mar\xe7 2020
Manual:    Dimarts, 10 Març 2020

Есть ли способ скажите Python, чтобы правильно обрабатывать специальные символы?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Ну, получается, у меня были проблемы с кодификацией файлов в Windows. Мне пришлось декодировать его перед обработкой. Таким образом, это решило проблему:

htmlfile = urllib.request.urlopen('http://www.somewebpage.com/')
for line in htmlfile:
    line = line.decode('cp1252')

Также возможно декодировать все html:

htmlfile = urllib.request.urlopen('http://www.somewebpage.com/').read()
htmldecoded = htmlfile.decode('cp1252')

Это решило проблему, и я смог правильно распечатать строки .

0 голосов
/ 16 апреля 2020

Не уверен, что это именно то, что вы хотите, но:

print(chr(231))

Напечатает нужный символ.

Также будет напечатано:

print(u"\xe7")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...