Вы должны защитить обратную косую черту с помощью другой обратной косой черты, в противном случае обратная косая черта рассматривается как символ перехода для следующей двойной кавычки. См. Это сообщение в блоге Раймонда Чена для обоснования такого поведения. Вот цитата соответствующей части:
blockquote>
- Строка обратных косых черт, за которой не следует кавычка, не имеет особого значения.
- Четное число обратных слешей, за которыми следует кавычка, рассматривается как пары защищенных обратных слешей, за которыми следует слово-терминатор.
- Нечетное число обратных косых черт, за которыми следует кавычка, рассматривается как пары защищенных обратных косых черт, за которыми следует защищенная кавычка.
[u'ABC']
был бы список с одним элементом строк unicode. Красивый Суп всегда производит Unicode. Таким образом, необходимо преобразовать список в единственную строку unicode и затем преобразовать это в ASCII.
я не знаю exaxtly, как Вы получили списки с одним элементом; участник содержания был бы списком строк и тегов, который является, по-видимому, не, что Вы имеете. Предположение, что Вы действительно всегда получаете список с единственным элементом, и что Ваш тест действительно только ASCII, Вы использовали бы это:
soup[0].encode("ascii")
Однако перепроверьте те свои данные, действительно ASCII. Это довольно редко. Намного более вероятно это латинское 1 или utf-8.
soup[0].encode("latin-1")
soup[0].encode("utf-8")
Или Вы спрашиваете Красивый Суп, чем было исходное кодирование, и верните его в этом кодировании:
soup[0].encode(soup.originalEncoding)
У Вас, вероятно, есть список, содержащий одну строку unicode. repr
из этого [u'String']
.
можно преобразовать это в список строк байтов с помощью любого изменения следующего:
# Functional style.
print map(lambda x: x.encode('ascii'), my_list)
# List comprehension.
print [x.encode('ascii') for x in my_list]
# Interesting if my_list may be a tuple or a string.
print type(my_list)(x.encode('ascii') for x in my_list)
# What do I care about the brackets anyway?
print ', '.join(repr(x.encode('ascii')) for x in my_list)
# That's actually not a good way of doing it.
print ' '.join(repr(x).lstrip('u')[1:-1] for x in my_list)
Используйте dir
или type
на 'строке' для обнаружения, каково это. Я подозреваю, что это - один из объектов тега BeautifulSoup, что печать как строка, но действительно не тот. Иначе его внутренняя часть список и Вы должны преобразовать каждую строку отдельно.
В любом случае, почему Вы возражаете против использования Unicode? Какая-либо определенная причина?
Вы действительно имеете в виду u'String'
?
В любом случае, Вы не можете только сделать str(string)
для получения строки, а не unicode-строки? (Это должно отличаться для Python 3, для которого все строки являются unicode.)