В текстовом файле есть строка «Мне это не нравится».
Однако, когда я считываю это в строке, это становится «Я не \ xe2 \ x80 \ x98t как это». Я понимаю, что \ u2018 является представлением "'" в Юникоде. я использую
f1 = open (file1, "r")
text = f1.read()
команда для чтения.
Теперь, возможно ли прочитать строку таким образом, чтобы, когда она считывалась в строке, это было «Мне это не нравится» вместо «Мне это не нравится \ xe2 \ x80 \ x98t вот так»?
Второе редактирование: я видел, как некоторые люди использовали сопоставление для решения этой проблемы, но на самом деле нет встроенного преобразования, которое выполняет такое преобразование ANSI в unicode (и наоборот)?
Ответы:
Ссылка: http://docs.python.org/howto/unicode
Поэтому читать Unicode из файла очень просто:
Также можно открывать файлы в режиме обновления, что позволяет читать и писать:
РЕДАКТИРОВАТЬ : Я предполагаю, что ваша предполагаемая цель - просто правильно прочитать файл в строке в Python. Если вы пытаетесь преобразовать в строку ASCII из Unicode, тогда на самом деле нет прямого способа сделать это, поскольку символы Unicode не обязательно будут существовать в ASCII.
Если вы пытаетесь преобразовать в строку ASCII, попробуйте одно из следующих действий:
Замените определенные символы Unicode эквивалентами ASCII, если вы хотите обрабатывать только несколько особых случаев, таких как этот конкретный пример
Используйте
unicodedata
модульnormalize()
иstring.encode()
метод для преобразования, насколько это возможно, в следующий ближайший эквивалент ASCII (Ссылка https://web.archive.org/web/20090228203858/http://techxplorer.com/2006/07/18/converting- unicode-to-ascii-using-python ):источник
codecs
модуль не обрабатывает универсальный режим новой строки должным образом. Используйтеio.open()
вместо этого на Python 2.7+ (он построенopen()
на Python 3).Следует учесть несколько моментов.
Символ \ u2018 может появляться только как фрагмент представления строки Unicode в Python, например, если вы напишете:
Теперь, если вы просто хотите красиво распечатать строку Unicode, просто используйте
encode
метод unicode :Чтобы гарантировать, что каждая строка из любого файла будет читаться как unicode, вам лучше использовать
codecs.open
функцию вместо простоopen
, которая позволяет вам указать кодировку файла:источник
Также можно прочитать закодированный текстовый файл с помощью метода чтения python 3:
В этом варианте нет необходимости импортировать дополнительные библиотеки.
источник
Но на самом деле это «мне это не нравится», а не «мне это не нравится». Символ u '\ u2018' - это совершенно другой символ, чем "'" (и визуально должен больше соответствовать' '').
Если вы пытаетесь преобразовать закодированный Unicode в простой ASCII, возможно, вы могли бы сохранить отображение знаков препинания Unicode, которое вы хотели бы перевести в ASCII.
Однако в юникоде очень много знаков пунктуации , но я полагаю, вы можете рассчитывать на то, что лишь некоторые из них действительно будут использоваться любым приложением, создающим документы, которые вы читаете.
источник
Не говоря уже о том, что ваш текстовый файл поврежден (U + 2018 - это левая кавычка, а не апостроф): iconv можно использовать для транслитерации символов Юникода в ascii.
Вам придется поискать "iconvcodec" в Google, поскольку модуль, похоже, больше не поддерживается, и я не могу найти для него каноническую домашнюю страницу.
В качестве альтернативы вы можете использовать
iconv
утилиту командной строки для очистки вашего файла:источник
Существует вероятность того, что у вас есть строка, отличная от Unicode, с escape-символами Unicode, например:
На самом деле это однажды случилось со мной. Вы можете использовать
unicode_escape
кодек для декодирования строки в Unicode, а затем закодировать ее в любой желаемый формат:источник
Это способ Pythons показать вам строки в кодировке Unicode. Но я думаю, вы сможете без проблем распечатать строку на экране или записать ее в новый файл.
источник
Фактически, U + 2018 - это Unicode-представление специального символа '. Если хотите, вы можете преобразовать экземпляры этого символа в U + 0027 с помощью этого кода:
Кроме того, что вы используете для записи файла?
f1.read()
должен вернуть строку, которая выглядит так:Если он возвращает эту строку, файл записывается неправильно:
источник