Функция Python open («x», «r»), откуда я могу узнать, какой кодировке должен иметь файл?
Если скрипт python использует функцию open("filename", "r")
для открытия и последующего чтения содержимого текстового файла, как я могу определить, какую кодировку должен иметь этот файл?
Обратите внимание, что, поскольку я выполняю этот скрипт из своей собственной программы, если есть какой-либо способ контролировать это через переменные среды, то это достаточно хорошо для меня.
Кстати, это Python 2.7.
Этот код исходит от Mercurial, ему может быть предоставлен список файлов, например, для добавления в репозиторий, через файл на диске, вместо передачи их в командной строке.
Таким образом, в основном, вместо этого:
hg add ABC
Я могу записать A, B и C в файл с новыми символами между ними, а затем выполнить следующее:
hg add listfile:input.txt
Код, который заканчивает чтение этого файла, следующий:
files = open(name, 'r').read().split(delimiter)
Отсюда мой вопрос. Ответ, который я получил в IRC, когда я спросил, какой кодировкой я должен использовать, было следующее:
это та же кодировка, что и в командной строке при передаче аргумента файла
Я предполагаю, что это то же самое кодирование, которое я использую при выполнении Mercurial (hg). Поскольку я понятия не имею, какой кодировкой это, я просто передаю все объекту .NET Process, я спрашиваю здесь.
- Предотвращение ошибок кодирования в Python
- «Интерфейсы» в Python: да или нет?
- Ловушки в моем коде для обнаружения кодирования текстового файла с помощью Python?
- Простой способ создания матрицы случайных чисел
- Как работают «магические линии» в python при определении кодировки в файле python?
Вы не можете. Чтение файла не зависит от его кодировки; вам нужно заранее знать кодировку, чтобы правильно интерпретировать прочитанные байты.
Например, если вы знаете, что файл закодирован в UTF-8:
with open('filename', 'rb') as f: contents = f.read().decode('utf-8-sig') # -sig deals with BOM, if present
Или, если вы знаете, что файл имеет только ASCII:
with open('filename', 'r') as f: contents = f.read() # results in a str object
Если вы действительно не знаете кодировку файла, то, очевидно, нет никакой гарантии, что вы можете прочитать его правильно; однако вы можете догадаться о кодировании с помощью инструмента, такого как chardet
.
ОБНОВЛЕНИЕ :
Думаю, теперь я понимаю ваш вопрос. Я думал, что у вас есть файл, который вам нужен для написания кода, но, похоже, у вас есть код, который вам нужно написать для 😉
Возможно, этот код работает только с простым ASCII (возможно, строки будут преобразованы позже, но вряд ли я думаю). Таким образом, вы захотите создать текстовый файл, содержащий только символы ASCII (codepoint <128) и убедитесь, что он сохранен в кодировке ASCII (то есть не UTF-16 или что-то в этом роде). Это немного печально, учитывая, что Mercurial имеет дело с именами файлов, которые могут содержать символы Unicode.
- Не удается заставить Кронтаб работать
- Как я могу создать один элемент списка Tkinter Listbox с разрывами строк?
- Как предотвратить кодирование аргумента командной строки?
- UnicodeEncodeError: кодек «charmap» не может кодировать символы символов на <undefined>, функция печати
- Как я могу понять плохо кодированное сообщение?
- Django – Как поделиться конфигурационными константами в приложении?
- Как получить кодировку терминала из сценария python?
- Укажите кодировку исходного файла Python из командной строки
- Python: предложение о том, как улучшить запись в потоковой текстовый файл в Python
- Частота счета ngrams
- Должны ли операторы импорта Python всегда находиться в верхней части модуля?