Ich verwende Beautiful Soup, um Webseiten zu analysieren und den Namen der besuchten Webseiten auf dem Terminal auszugeben. Allerdings enthält der Name der Webseite häufig ein einzelnes Linkszeichen (\u2018) und rechts (\u2019) Zeichen, das Python nicht drucken kann, da es einen Charmap-Kodierungsfehler verursacht.
Gibt es eine Möglichkeit, diese Zeichen zu entfernen?
Bitte fügen Sie einen Teil Ihres Codes sowie Ihre Ausgabe und die erwartete Ausgabe hinzu. Es wird gut sein, bessere Lösungen zu zeichnen
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, binding=”UTF-8″) ist hilfreich, um Kodierungsfehler von vornherein zu vermeiden.
– Yiğit
23. April 2020 um 21:34 Uhr
Martin Konecny
Diese Codes sind Unicode für die einzelnen linken und rechten Anführungszeichen. Sie können sie durch ihr ASCII-Äquivalent ersetzen, das Python problemlos auf Ihrem System drucken sollte:
import re
s = u"\u2018Hi\u2019"
>>> print re.sub(u"(\u2018|\u2019)", "'", s)
'Hi'
Allerdings sollte Python auch keine Probleme damit haben, die Unicode-Version davon zu drucken. Es ist möglich, dass Sie verwenden str() irgendwo, wo versucht wird, Ihren Unicode in ASCII zu konvertieren und Ihre Ausnahme auszulösen.
Da einzelne Zeichen (\u2018 Und \u2019) muss ersetzt werden, str.translate() Könnte auch verwendet werden.
s = "\u2018Hi\u2019"
s_new = s.translate(str.maketrans({'\u2018': "'", '\u2019': "'"}))
# or even use the unicode characters themselves
s_new = s.translate(str.maketrans({'‘': "'", '’': "'"}))
print(s_new) # 'Hi'
Oder geben Sie beim Parsen zunächst die Codierung an.
# if parsing an html
soup = BeautifulSoup(html, from_encoding='utf-8')
# if reading a file
with open("text.txt", encoding='utf-8') as f:
f.read()
14536400cookie-checkEntfernen von \u2018 und \u2019 Zeichenyes
Bitte fügen Sie einen Teil Ihres Codes sowie Ihre Ausgabe und die erwartete Ausgabe hinzu. Es wird gut sein, bessere Lösungen zu zeichnen
– sundar nataraj
23. Juni 2014 um 4:46
Hinweis: U+2018 = Linkes einfaches Anführungszeichen, U+2019 = Rechtes einfaches Anführungszeichen
– Marjorie Roswell
19. Juni 2017 um 5:27
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, binding=”UTF-8″) ist hilfreich, um Kodierungsfehler von vornherein zu vermeiden.
– Yiğit
23. April 2020 um 21:34 Uhr