Pycharm добавляет обязательную спецификацию при создании файлов из терминала

#python #windows #encoding #pycharm #byte-order-mark

Вопрос:

После обновления Pycharm до версии 2021.2 всякий раз, когда я создаю новый файл .py на терминале Pycharm с помощью echo, я не могу запустить его из-за следующей ошибки:

 SyntaxError: Non-UTF-8 code starting with 'xff' in file [file path...] on line 1, but no encoding declared;
 

Посмотрев его, я убедился, что pycharm добавляет обязательную спецификацию в созданный файл.

Вещи, которые я пробовал:

Перейдите в Файл -> Свойства файла ->> Удалить спецификацию (ее невозможно удалить)

Перейдите в Файл -> Свойства файла ->> Кодировка файла и измените ее на UTF-8 (появится следующее всплывающее окно): введите описание изображения здесь

Тоже не могу его преобразовать.

Перейдите в раздел Справка -> Редактирование пользовательских параметров виртуальной машины и добавление > -Dconsole.encoding=UTF-8 в нее

Создание нового файла python с помощью щелчка работает нормально.
Создание нового файла с помощью echo в терминале cmd тоже работает нормально.

В чем причина этого? Как мне ее решить? У меня не было этой проблемы до обновления Pycharm.

Комментарии:

1. Вы уверены в проблеме? Сообщение об ошибке сообщает вам, что файл имеет формат UTF-16LE, поэтому он не является UTF-8. (и не удаляйте спецификацию на UTF-16). Так что ваш файл не UTF-8, перекодируйте его, прежде чем думать о спецификации. — примечание: Python по умолчанию является исходным кодом UTF-8. Если вы хотите UTF-16, вы должны объявить в начале файла (чего вы не сделали, и поэтому первоначальная ошибка)

2. Я не хочу UTF-16. Я просто хочу создать новый файл с помощью echo на терминале Pycharm. Раньше мне не нужно было ничего объявлять. Я хотел бы знать, как я могу вернуться к этому. Что я должен сделать, чтобы достичь этого?

3. Ваш исходный файл-UTF-16. В этом-то и проблема

4. Но тогда почему это UTF-16? Как мне сделать так, чтобы всякий раз, когда я создаю новый файл с терминала Pycharm, вместо него был UTF-8? И почему я не могу преобразовать его с помощью Pycharm?

5. У меня есть…. AppDataLocalProgramsGitgit-cmd.exe (который он использует bash, и он похож на обычные консоли unix, и он не перекодирует перенаправления) [у вас есть это, если вы установили git]. В противном случае проверьте любую другую консоль. Лучше тот, который также используется в Unix/Linux (создан не для того, чтобы создавать новые сюрпризы, и есть много документации и справки)

Ответ №1:

Как отметил Джакомо Катенацци, изменение терминала на Settings -> tools -> terminal любой cmd.exe или git-cmd.exe (из powershell.exe) сработало идеально.

Теперь я могу снова создавать файлы с помощью echo на терминале без установки UTF-16 и без спецификации.

Комментарии:

1. Если вы используете cmd, вы просто изменили кодировку с utf16 на кодовую страницу по умолчанию (так что windows-1252 или аналогично). Это может работать правильно, пока вы придерживаетесь ASCII, но это все, это не utf8. PowerShell может сохранять как utf8, а ядро PowerShell да utf8 по умолчанию. Git-cmd также будет работать, но имеет другие ограничения.

2. @voo: какое ограничение git-cmd? Он использует много стандартизированных инструментов и более совместим с терминалами развертывания. PowerShell не так стабилен: слишком много изменений (и, судя по количеству проблем с кодированием и совместимости здесь, в SO, это кажется беспорядком).

3. @Giacomo PowerShell долгое время был стандартным инструментом администрирования сервера в Windows, поэтому он очень стабилен. Ситуация с кодированием также проста (классический PowerShell и ниже использует UTF16-LE, за исключением случаев, когда вы явно указываете ему использовать другую кодировку). А проблемы с git-cmd? Просто попробуйте echo ähem > test.txt и посмотрите, выглядит ли полученный файл для вас как правильный UTF-8 (на самом деле я думаю, что у git-cmd могут быть те же проблемы, что и у cmd, я думал о git-bash, у которого есть свои ограничения).

4. Если вам нужна действительная поддержка UTF-8, самый простой способ-использовать PowerShell Core или использовать достаточно новую Windows, где вы можете изменить кодовую страницу на кодовую страницу utf8 (хотя это все еще несколько экспериментально, и, в частности, старые оболочки не очень хорошо справляются с этим).

5. @Voo: это дает мне то, что я ожидаю (это зависит от языка, но тот , который использует Юникод, устанавливает его как en_US.UTF-8 , что довольно стандартно). «PowerShell», «Ядро PowerShell» или последние окна . Ты понимаешь, что я имею в виду? И если мне нужно сохранить двоичные значения (или просто неправильную кодировку) моей программы, я уверен, что перенаправление работает, поэтому я могу отлаживать. Никаких дополнительных инструментов для искажения результатов перенаправления (что затрудняет отладку проблем с кодированием)