Файл не отображается в редакторе так как является двоичным visual studio code
Почему при открытии двоичного файла в текстовом редакторе не отображается двоичный код? Например, когда я открываю изображение в текстовом редакторе, я вижу некоторые странные символы, а также некоторые читаемые человеком символы; но изображение должно быть закодировано в двоичном формате.
Binary и text данные не разделены: они просто data. Это зависит от интерпретации, которая делает их одним или другим. Если вы откроете двоичные данные (например, файл изображения) в текстовом редакторе, большая их часть не будет иметь смысла, потому что они не соответствуют выбранному толкование (как текст).
что вы называете text это подмножество возможного содержимого файла: данные, набор символов переводит на читаемые символы.
например,ASCII, вы можете видеть, что из 128 "разрешенных" значений, только около половины-буквы и цифры, 30-пунктуация, а остальные символы. Последняя группа просто мало используется в текстовых файлах, и у них нет действительно хорошего текстового представления. Некоторые из них Tab и новая строка символы, где текстовые редакторы уже нужны чтобы проявить творческий подход к их отображению.
некоторые текстовые редакторы могут явно отображать пробелы. Тогда они будут нарисованы как персонажи, в дополнение к их обычным форматирование поведение (которое также является просто толкование этих персонажей).
чистый ASCII интерпретирует только 128 значений. Байты, используемые для хранения этой информации, имеют 256 возможных значений каждый, поэтому половина возможных значений не допускается в ASCII. Те например, используются в региональных кодировках, таких как Latin 1, но в ASCII они не определены. Они не имеют полезного представления в просмотрщике текста, который может обрабатывать только ASCII.
двоичные данные обычно не интерпретируется как текст. Так что в этих файлах все возможные значения байта обычно встречаются. Все остальное было бы расточительно (и именно поэтому вы можете очень хорошо сжимать текст). Форматы файлов изображений сложны, а вы нет обычно их рассматривают как текст, поэтому их не нужно читать.
поскольку нет общей интерпретации данных (набора символов), которая сопоставляет все возможные значения читаемым символам, и поскольку это все равно не имеет большого смысла (поскольку это не читаемый текст), основные части отображаются как тарабарщина.
шестнадцатеричный редактор выбирает другое представление для данных: он отображает каждый байт как два шестнадцатеричное цифр. Это просто другое представления, и одно с легко читаемый набор символов: все 256 возможных значений байта могут быть представлены в виде двух шестнадцатеричных цифр.
некоторые текстовые редакторы могут иметь HEX-редактор режима и некоторые эвристики, которые пытались определить, является ли файл текстовым или двоичным, и автоматически выбирать тот или иной режим. Но это может быть трудно получить право, и это не конкретное свойство файла, который говорит, является ли это один вид или другой.
некоторые FTP-клиенты просят указать, какие окончания файлов используются для текст data. Затем эти программы изменят содержимое файла в соответствии с операционной системой компьютера, к которому вы подключены, так как Windows использует другую последовательность символов конца строки ( CR/LF ) чем Linux и Unix (включая Mac OS X; LF ).
При использовании VS Code для создания и редактирования сценариев PowerShell очень важно, чтобы ваши файлы сохранялись в правильной кодировке символов.
Что такое кодировка и почему она важна?
VS Code управляет интерфейсом ввода строки символов в буфер пользователем и чтения-записи блоков байтов в файловой системе. При сохранении файла в VS Code используется кодирование текста для определения того, какие байты получит каждый символ. Подробные сведения см. в статье О шифровании символов.
Аналогичным образом, когда оболочка PowerShell запускает скрипт, ей необходимо преобразовать байты из файла в символы для преобразования файла в программу PowerShell. Так как VS Code записывает файл, а PowerShell считывает файл, этим средствам необходимо использовать одну и ту же систему кодировки. Этот процесс синтаксического анализа скрипта PowerShell идет так: байты -> символы -> лексемы -> дерево абстрактного синтаксиса -> выполнение.
И VS Code, и PowerShell устанавливаются с подходящей конфигурацией кодировки по умолчанию. Тем не менее кодировка по умолчанию, используемая PowerShell, была изменена с выпуском PowerShell 6. Чтобы избежать проблем с PowerShell и расширениями PowerShell в VS Code, необходимо настроить параметры VS Code и PowerShell должным образом.
Распространенные причины проблемы с кодировкой
Проблемы с кодировкой возникают, если кодировка VS Code в целом или вашего файла скрипта не совпадает с кодировкой, ожидаемой в PowerShell. В PowerShell нет способа автоматически определить кодировку файла.
Проблемы с кодировкой более вероятны при использовании символов не из 7-разрядной кодировки ASCII. Пример:
- Расширенные небуквенные символы, такие как длинное тире ( — ), неразрывный пробел ( ) или левая двойная кавычка ( " ).
- Латинские символы с диакритикой ( É , ü )
- Нелатинские символы, такие как кириллица ( Д , Ц )
- Символы иероглифического письма ( 本 , 화 , が ).
Распространенные причины проблем с кодировкой:
- Параметры кодировок по умолчанию VS Code и PowerShell не были изменены. В версиях до PowerShell 5.1 (включительно) кодировка по умолчанию отличается от используемой в VS Code.
- Открыт другой редактор, и файл перезаписан в новой кодировке. Это часто происходит с интегрированной средой сценариев.
- Файл возвращается в систему управления версиями в кодировке, отличающейся от той, которая ожидается в VS Code или PowerShell. Это может произойти, когда участники совместной работы используют редакторы с различными конфигурациями кодировок.
Как определить наличие проблемы с кодировкой
Часто ошибки кодирования в скриптах представляются как ошибки синтаксического анализа. Если вы видите странные последовательности символов в скрипте, это может быть проблемой. В примере ниже тире ( – ) отображается в виде символов â€" :
Эта проблема возникает, так как VS Code кодирует символ – в UTF-8 как байты 0xE2 0x80 0x93 . Если эти байты декодируются в кодировке Windows-1252, они интерпретируются как символы â€" .
Некоторые странные последовательности символов, которые можно видеть:
- â€" вместо – .
- â€" вместо — .
- Ä2 вместо Ä .
- Â вместо (неразрывный пробел);
- é вместо é .
Этот удобный справочник перечисляет распространенные шаблоны, которые указывают на проблему между кодировками UTF-8 и Windows-1252.
Взаимодействие расширения PowerShell для VS Code с кодировками
Расширение PowerShell взаимодействует со скриптами несколькими способами:
- При изменении скриптов в VS Code содержимое отправляется из VS Code в расширение. Протокол языкового сервера требует, чтобы это содержимое передавалось в UTF-8. Таким образом, расширение не сможет получить неправильную кодировку.
- При выполнении скриптов в интегрированной консоли они считываются оболочкой PowerShell непосредственно из файла. Если кодировка PowerShell отличается от кодировки VS Code, может произойти сбой.
- Когда скрипт, который открыт в VS Code, ссылается на другой скрипт, который не был открыт в VS Code, расширение загружает содержимое второго скрипта из файловой системы. Расширение PowerShell по умолчанию использует кодировку UTF-8, но при этом применяет обнаружение метки порядка байтов (BOM), чтобы выбрать правильную кодировку.
Проблема возникает при предположении кодировки, не использующей BOM (такой как UTF-8 без метки порядка байтов или Windows-1252). Расширение PowerShell по умолчанию использует UTF-8. Расширение не может изменить параметры кодировки в VS Code. Дополнительные сведения см. в разделе Проблема № 824.
Выбор подходящей кодировки
Различные системы и приложения могут использовать различные кодировки:
Кодировки Юникода также используют понятие метки порядка следования байтов (BOM). BOM ставится в начале текста, чтобы декодер мог определить, какая кодировка используется в тексте. Для многобайтовых кодировок BOM также указывает порядок следования байтов кодировки. BOM представляются байтами, которые редко встречаются в тексте в Юникоде. Это позволяет сделать обоснованное предположение, что текст записан в Юникоде, если присутствует метка BOM.
BOM не являются обязательными; в мире Linux они не так популярны, поскольку во всех прочих местах используется надежное соглашение UTF-8. Большинство приложений Linux предполагают, что текстовый ввод кодируется в UTF-8. Хотя многие приложения Linux могут распознавать и правильно обрабатывать BOM, некоторые этого не делают, что приводит к появлению артефактов в тексте, открываемом с помощью этих приложений.
Таким образом:
- Если вы работаете в основном с приложениями Windows и Windows PowerShell, следует предпочтительно использовать такие кодировки, как UTF-8 с BOM или UTF-16.
- Если вы работаете на разных платформах, следует отдавать предпочтение UTF-8 с BOM.
- Если вы работаете главным образом в контексте Linux, следует отдавать предпочтение UTF-8 без BOM.
- Windows-1252 и latin-1 — устаревшие кодировки, которых по возможности следует избегать. Тем не менее некоторые приложения предыдущих версий в Windows зависят от их.
- Также стоит отметить, что подписывание скриптов зависит от кодировки, то есть изменение кодировки в подписанном скрипте потребует повторного подписывания.
Настройка VS Code
Кодировка VS Code по умолчанию — UTF-8 без метки порядка байтов.
Чтобы задать Кодировка в VS Code, перейдите к параметрам VS Code ( CTRL + , ) и задайте параметр "files.encoding" :
Возможны следующие значения:
- utf8 : [UTF-8] без метки порядка байтов
- utf8bom : [UTF-8] с меткой порядка байтов
- utf16le : [UTF-16] с прямым порядком байтов
- utf16be : [UTF-16] с обратным порядком байтов
- windows1252 : [Windows-1252]
Должен отобразиться раскрывающийся список представления графического пользовательского интерфейса или дополнение в представлении JSON.
Чтобы обеспечить автоматическое определение кодировки, если это возможно, можно также добавить следующее:
Если вы не хотите, чтобы эти параметры влияли на все типы файлов, в VS Code можно задавать конфигурации для каждого языка отдельно. Создать параметр для конкретного языка можно, поместив параметры в поле [<language-name>] . Пример:
Вы также можете установить средство отслеживания Gremlins для Visual Studio Code. Это расширение раскрывает определенные символы Юникода, которые могут быть легко повреждены из-за своей невидимости или схожести с другими обычными символами.
Настройка PowerShell
В PowerShell кодировка по умолчанию зависит от версии:
- В PowerShell 6+ кодировка по умолчанию на всех платформах — UTF-8 без метки порядка байтов.
- В Windows PowerShell кодировка по умолчанию — обычно Windows-1252, расширение latin-1, которое также называется ISO 8859-1.
В PowerShell 5 + можно определить кодировку по умолчанию так:
Следующий скрипт может использоваться для определения кодировки, которую ваш сеанс PowerShell выводит для скрипта, где нет метки порядка байтов.
Можно настроить PowerShell так, чтобы использовать заданную кодировку в более общем виде с помощью параметров профиля. См. следующие статьи:
Заставить PowerShell использовать конкретную кодировку для входных данных невозможно. В PowerShell 5.1 и более ранних версий в Windows с языковым стандартом en-US по умолчанию используется кодировка Windows-1252, если отсутствует метка порядка байтов. Другие параметры языкового стандарта могут использовать другую кодировку. Для обеспечения совместимости лучше сохранять скрипты в Юникоде с меткой порядка байтов.
Любые другие имеющиеся у вас инструменты для работы со скриптами PowerShell могут зависеть от выбранных параметров кодировки или преобразовывать скрипты в другую кодировку.
Существующие скрипты
Скрипты, которые уже находятся в файловой системе, могут нуждаться в повторном кодировании в указанную вами кодировку. В нижней строке VS Code вы увидите метку UTF-8. Щелкните ее, чтобы открыть панель действий, и выберите команду Сохранить с кодировкой. Теперь вы можете выбрать новую кодировку для этого файла. Подробные инструкции см. в разделе Кодировка в VS Code.
Если вам нужно повторно кодировать несколько файлов, можно использовать следующий скрипт:
Интегрированная среда сценариев (ISE) PowerShell
При редактировании скриптов с помощью интегрированной среды сценариев PowerShell необходимо синхронизировать здесь параметры кодировки.
Интегрированная среда сценариев должна учитывать метку порядка байтов, но можно также использовать отражение для задания кодировки. Обратите внимание, что это значение не сохраняется между запусками.
Система управления версиями
Некоторые системы управления версиями, например git, игнорируют кодировки; git отслеживает только байты. Поведение других, например Azure DevOps или Mercurial, может отличаться. Даже некоторые средства, основанные на git, полагаются на декодирование текста.
Если это так, убедитесь, что вы:
- Настроили кодировку в системе управления версиями в соответствии с вашей конфигурацией VS Code.
- Сделали так, что все файлы добавляются в систему управления версиями в соответствующей кодировке.
- Остерегайтесь изменять кодировки, полученные через систему управления версиями. Ключевым признаком здесь будет разностный файл, который указывает, что изменения отсутствуют (так как изменены байты, но не символы).
Среды других участников
Настроив систему управления версиями, убедитесь также, что параметры других участников, работающих над теми файлами, к которым вы предоставляете общий доступ, не переопределяют кодировку путем повторного кодирования файлов PowerShell.
Другие программы
Все другие программы, которые считывают или записывают скрипты PowerShell, могут перекодировать их.
- Использование буфера обмена для копирования и вставки скрипта. Такое часто встречается в следующих случаях:
- Копирование скрипта в виртуальную машину.
- Копирование скрипта из электронной почты или с веб-страницы.
- Копирование скрипта через документ Microsoft Word или PowerPoint.
- Блокнот;
- vim;
- любой другой редактор скриптов PowerShell.
- Get-Content / Set-Content / Out-File
- Операторы перенаправления PowerShell, такие как > и >> .
- sed / awk
- Веб-браузер при скачивании скриптов.
- Общий файловый ресурс.
Некоторые из этих средств работают с байтами, а не с текстом, но другие позволяют настраивать кодировки. В случаях, когда необходимо настроить кодировку, используйте те же параметры, что и в вашем редакторе, чтобы предотвратить возникновение проблем.
Другие ресурсы о кодировках в PowerShell
Существует несколько других достойных публикаций на тему кодировок и настройки кодирования в PowerShell:
Почему вы не видите двоичный код при открытии двоичного файла с текстовым редактором? Например, когда я открываю изображение с текстовым редактором, я вижу некоторые странные символы, а также некоторые человекообразные символы; но изображение должно быть закодировано в двоичном формате.
Двоичные и текст данные не разделяются: они просто данные . Это зависит от интерпретации, которая делает их одной или другой. Если вы откроете двоичные данные (например, файл изображения) в текстовом редакторе, большая часть из них не будет иметь смысла, поскольку она не соответствует выбранной вами интерпретации (как текст).
То, что вы называете text , представляет собой подмножество возможного содержимого файла: данные, которые в данном преобразуется в считываемые символы.
Например, в ASCII вы можете видеть, что из 128 «разрешенных» значений только около половины - буквы и цифры, 30 - пунктуация, а остальные управляющие символы . Последняя группа просто не используется много в текстовых файлах, и у них нет действительно хорошего текстового представления. Некоторые из них - это символы Tab и Newline , где текстовые редакторы уже должны создавать объявления при их отображении.
Некоторые текстовые редакторы имеют опции для явного отображения пробелов. Затем они будут фактически нарисованы как символы, в дополнение к их регулярному поведению форматирования (что также является интерпретацией этих символов).
Pure ASCII интерпретирует только 128 значений. Байты, используемые для хранения этой информации, имеют 256 возможных значений, поэтому половина возможных значений не допускается в ASCII. Это, например, используется в региональных наборах символов, таких как Latin 1, но в ASCII они не определены. Они не имеют полезного представления в текстовом редакторе, который может обрабатывать только ASCII.
Двоичные данные обычно не интерпретируются как текст. Таким образом, в этих файлах обычно присутствуют все возможные байтовые значения . Все остальное было бы расточительным (и это причина, по которой вы можете сжимать текст очень хорошо). Форматы файлов изображений сложны, и вы обычно не рассматриваете их как текст, поэтому их не нужно читать.
Так как нет общей интерпретации данных (набор символов), которая отображает все возможные значения для читаемых символов, и поскольку это не имеет большого смысла (так как это не читаемый текст), основные части отображаются как тарабарщина.
Шестигранный редактор выбирает другое представление для данных: он отображает каждый байт в виде двух шестнадцатеричных цифр. Это просто другое представление и одно с легко читаемым человеческим набором символов: все 256 возможных байтовых значений могут быть представлены как две шестнадцатеричные цифры.
Поскольку существует простое сопоставление двоичных данных с шестнадцатеричным и наоборот (4 двоичных цифры в /из одной шестнадцатеричной цифры), а двоичный код содержит очень мало информации на цифру, шестнадцатеричный, как правило, является предпочтительным способом для людей читать двоичные данные, если только есть особые причины предпочесть другое представление.
Некоторые текстовые редакторы могут иметь режим hex editor и некоторую эвристику, которая пыталась определить, является ли файл текстовым или двоичным, и автоматически выбирает один или несколько режимов. Но это может быть трудно получить правильно, и это не является специфическим свойством файла, который говорит, является ли он одним или другим.
Некоторые FTP-клиенты просят указать, какие окончания файлов используются для текстовых данных . Эти программы затем изменят содержимое файла в соответствии с ОС вашего компьютера, к которому вы подключены, поскольку Windows использует другую последовательность символов окончания строки ( CR/LF ), чем Linux и Unix (включая Mac OS X, LF ).
Очевидно, VS Code не перечисляет существующие файлы в выпадающем списке файлов (команда Ctrl + P ).
Вот что это показывает:
Как видите, файл laravel-2019-09-26.log существует в каталоге (слева внизу), но не в выпадающем списке файлов. После того, как я открываю этот файл из дерева Проводника, он начинает отображаться в раскрывающемся списке.
Я делаю что-то не так или это случается со всеми? Или эта команда должна показывать только ранее открытые файлы? Если да, то как быстро открыть любой существующий файл в рабочей области?
Редактировать
Для будущих читателей второй ответ, предоставленный @michaelze, будет правильным. Код VS по умолчанию не перечисляет файлы, упомянутые в .gitignore . Вы можете изменить этот параметр, перейдя на панель настроек (Файл> Настройки> Настройки) и набрав useIgnoreFiles . Это вызовет две логические настройки с именами Use Global Ignore Files и Use Ignore Files . Отключите эти две настройки, и все файлы рабочей области начнут отображаться в раскрывающемся списке файлов. Правильно работает с версии 1.38.1.
2 ответа
Поскольку эти файлы являются файлами .log, я предполагаю, что они могут быть упомянуты в файле .gitignore? Может быть, это может помочь вам? Код Visual Studio - автоматическое исключение на основе .gitignore
Список, который вы просматриваете при нажатии CTRL + P, вызывается недавно открытым. Когда вы открываете один из файлов, он был недавно открыт, поэтому он появляется. В меню CTRL + P также имеется раздел с результатами поиска файлов, в котором перечислены фактические результаты поиска по файлам, имеющимся в рабочей области. Ни один из ваших файлов .log не отображается в этом разделе (следовательно, этот раздел не отображается).
Файл laravel-2019-09-08.log также отсутствует в раскрывающемся списке. Мне было интересно, может быть, список ограничен определенным количеством файлов. Попробуйте быть более конкретным с вашим поиском. В моей версии VSCode я могу искать файлы, используя несколько слов. Может быть, попробуйте поискать "laravel 26", чтобы найти файл, который вы ищете?
Я использую Visual Studio Code для работы над проектами, которые включают не только программный код, но и файлы данных, например, в формате Excel.
VSCode не может редактировать такие файлы, так как они являются двоичными. Попытка сделать это показывает предупреждение, и если вы будете упорствовать, файл будет показан (как тарабарщина).
Я также попытался передать файл в (CMD) terminal (щелкните правой кнопкой мыши, "открыть в Terminal"). В обычном окне CMD, которое вызывало бы приложение по умолчанию, но это не работает в VSCode.
Есть ли простой способ, который я могу использовать из VSCode, чтобы открыть такие файлы с помощью приложений по умолчанию?
1 ответ
У меня есть файл xml с конфигурационными данными для моего приложения. Этот файл не используется компилятором, но копируется в выходной каталог и используется во время выполнения. Я хочу назвать этот файл extensions.settings . Но с окончанием .settings visual studio трактует файл по-особому. При.
Расширение sandcastle.vscode-open делает это. Установите его, и вы сможете открыть любой файл с приложением по умолчанию, щелкнув правой кнопкой мыши имя файла в меню explorer.
Похожие вопросы:
Я пытаюсь настроить свой Mac Book Pro (OSX El Capitan 10.11.1) на использование Visual Studio Code в качестве редактора по умолчанию. Я создал файл
/.bash_profile со следующими двумя строками.
Я просто исследую способ открыть браузер по умолчанию из Visual Studio Code API, используемый для разработки расширений. Ниже приведен мой код : var disposable =.
У меня есть файл xml с конфигурационными данными для моего приложения. Этот файл не используется компилятором, но копируется в выходной каталог и используется во время выполнения. Я хочу назвать.
Я установил Visual Studio Code 1.7.1 на свой Ubuntu Linux. Сначала у меня был пустой экран, когда я его запустил, но после того, как я добавил --disable-gpu, он работает нормально. Теперь, если я.
Я следую этому , чтобы открыть файл из URL в Visual Studio Code уже предоставленном: И вот как я это делаю в своем файле: <a href=vscode:/file/Users/abc/Desktop/about.html>Launch VS.
Программное обеспечение: Visual Studio Code OS : macOS 10.14 Версия: 1.28.2 (1.28.2) У меня есть папка, над которой я работаю каждый раз с VSC, никаких других требований. Я хочу открыть эту папку.
Я запускаю Windows 10 Pro. Мой браузер по умолчанию для Windows-Google Chrome. Я также запускаю visual studio code (версия 1.22.1). Когда я набираю команду в terminal (git bash), которая открывает.
У меня есть PC под управлением Windows 10 Pro для рабочих станций, и в настоящее время Typescript файла (расширение .ts) открываются с помощью Films & TV. Я зашел в Настройки > выбрать.
Читайте также: