файл не отображается в редакторе так как является двоичным visual studio code
Почему вы не видите двоичный код при открытии двоичного файла с текстовым редактором?
Почему вы не видите двоичный код при открытии двоичного файла с текстовым редактором? Например, когда я открываю изображение с текстовым редактором, я вижу некоторые странные символы, а также некоторые человекообразные символы; но изображение должно быть закодировано в двоичном формате.
5 ответов
Некоторые текстовые редакторы имеют опции для явного отображения пробелов. Затем они будут фактически нарисованы как символы, в дополнение к их регулярному поведению форматирования (что также является интерпретацией этих символов).
Pure ASCII интерпретирует только 128 значений. Байты, используемые для хранения этой информации, имеют 256 возможных значений, поэтому половина возможных значений не допускается в ASCII. Это, например, используется в региональных наборах символов, таких как Latin 1, но в ASCII они не определены. Они не имеют полезного представления в текстовом редакторе, который может обрабатывать только ASCII.
Так как нет общей интерпретации данных (набор символов), которая отображает все возможные значения для читаемых символов, и поскольку это не имеет большого смысла (так как это не читаемый текст), основные части отображаются как тарабарщина.
Шестигранный редактор выбирает другое представление для данных: он отображает каждый байт в виде двух шестнадцатеричных цифр. Это просто другое представление и одно с легко читаемым человеческим набором символов: все 256 возможных байтовых значений могут быть представлены как две шестнадцатеричные цифры.
Поскольку существует простое сопоставление двоичных данных с шестнадцатеричным и наоборот (4 двоичных цифры в /из одной шестнадцатеричной цифры), а двоичный код содержит очень мало информации на цифру, шестнадцатеричный, как правило, является предпочтительным способом для людей читать двоичные данные, если только есть особые причины предпочесть другое представление.
Некоторые текстовые редакторы могут иметь режим hex editor и некоторую эвристику, которая пыталась определить, является ли файл текстовым или двоичным, и автоматически выбирает один или несколько режимов. Но это может быть трудно получить правильно, и это не является специфическим свойством файла, который говорит, является ли он одним или другим.
Практическое руководство. Сохранение и открытие файлов с использованием определенной кодировки
Вы можете сохранять файлы с определенной кодировкой для поддержки языков с двунаправленным письмом. Можно также указать кодировку при открытии файла, чтобы система Visual Studio отобразила его правильно.
Сохранение файла с кодировкой
В меню Файл выберите Сохранить файл как и затем нажмите кнопку раскрывающегося списка рядом с кнопкой Сохранить.
Откроется диалоговое окно Дополнительные параметры сохранения.
В разделе Кодировка выберите нужную кодировку для файла.
При необходимости в разделе Завершение строк выберите формат для знаков конца строки.
Этот параметр полезен, если предполагается обмениваться файлами с пользователями, работающими в другой операционной системе.
Если вы хотите работать с файлом, имеющим определенную кодировку, можно сообщить Visual Studio использовать эту кодировку при открытии файла. Конкретный метод зависит от того, является ли файл частью проекта.
Чтобы сохранить файл проекта с кодировкой, необходимо выгрузить проект. Только после этого станет доступна команда Сохранить файл как.
Открытие файла с кодировкой, являющегося частью проекта
В обозревателе решений щелкните файл правой кнопкой мыши и выберите команду Открыть с помощью.
В диалоговом окне Открыть с помощью выберите редактор для открытия файла.
Многие редакторы Visual Studio, такие как редактор форм, автоматически определяют кодировку и открывают файл соответствующим образом. Если вы воспользовались редактором, который позволяет указать кодировку, появляется диалоговое окно Кодировка.
В диалоговом окне Кодировка выберите кодировку, которую должен использовать редактор.
Открытие файла с кодировкой, не являющегося частью проекта
В меню Файл наведите указатель мыши на пункт Открыть, выберите элемент Файл или Файл из Интернета, а затем выберите нужный файл.
Нажмите кнопку раскрывающегося списка рядом с кнопкой Открыть и выберите пункт Открыть с помощью.
Выполните шаги 2 и 3 из предыдущей процедуры.
Почему двоичный код не отображается при открытии двоичного файла в текстовом редакторе?
Почему при открытии двоичного файла в текстовом редакторе не отображается двоичный код? Например, когда я открываю изображение в текстовом редакторе, я вижу некоторые странные символы, а также некоторые читаемые человеком символы; но изображение должно быть закодировано в двоичном формате.
5 ответов
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 для создания и редактирования сценариев PowerShell очень важно, чтобы ваши файлы сохранялись в правильной кодировке символов.
Что такое кодировка и почему она важна?
VS Code управляет интерфейсом ввода строки символов в буфер пользователем и чтения-записи блоков байтов в файловой системе. При сохранении файла в VS Code используется кодирование текста для определения того, какие байты получит каждый символ. Подробные сведения см. в статье О шифровании символов.
И VS Code, и PowerShell устанавливаются с подходящей конфигурацией кодировки по умолчанию. Тем не менее кодировка по умолчанию, используемая PowerShell, была изменена с выпуском PowerShell 6. Чтобы избежать проблем с PowerShell и расширениями PowerShell в VS Code, необходимо настроить параметры VS Code и PowerShell должным образом.
Распространенные причины проблемы с кодировкой
Проблемы с кодировкой возникают, если кодировка VS Code в целом или вашего файла скрипта не совпадает с кодировкой, ожидаемой в PowerShell. В PowerShell нет способа автоматически определить кодировку файла.
Проблемы с кодировкой более вероятны при использовании символов не из 7-разрядной кодировки ASCII. Пример:
Распространенные причины проблем с кодировкой:
Как определить наличие проблемы с кодировкой
Часто ошибки кодирования в скриптах представляются как ошибки синтаксического анализа. Если вы видите странные последовательности символов в скрипте, это может быть проблемой. В примере ниже тире ( – ) отображается в виде символов ※ :
Некоторые странные последовательности символов, которые можно видеть:
Этот удобный справочник перечисляет распространенные шаблоны, которые указывают на проблему между кодировками UTF-8 и Windows-1252.
Взаимодействие расширения PowerShell для VS Code с кодировками
Расширение PowerShell взаимодействует со скриптами несколькими способами:
Проблема возникает при предположении кодировки, не использующей 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, некоторые этого не делают, что приводит к появлению артефактов в тексте, открываемом с помощью этих приложений.
Таким образом:
Настройка VS Code
Кодировка VS Code по умолчанию — UTF-8 без метки порядка байтов.
Возможны следующие значения:
Должен отобразиться раскрывающийся список представления графического пользовательского интерфейса или дополнение в представлении JSON.
Чтобы обеспечить автоматическое определение кодировки, если это возможно, можно также добавить следующее:
Вы также можете установить средство отслеживания Gremlins для Visual Studio Code. Это расширение раскрывает определенные символы Юникода, которые могут быть легко повреждены из-за своей невидимости или схожести с другими обычными символами.
Настройка PowerShell
В PowerShell кодировка по умолчанию зависит от версии:
В 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, полагаются на декодирование текста.
Если это так, убедитесь, что вы:
Среды других участников
Настроив систему управления версиями, убедитесь также, что параметры других участников, работающих над теми файлами, к которым вы предоставляете общий доступ, не переопределяют кодировку путем повторного кодирования файлов PowerShell.
Другие программы
Все другие программы, которые считывают или записывают скрипты PowerShell, могут перекодировать их.
Некоторые из этих средств работают с байтами, а не с текстом, но другие позволяют настраивать кодировки. В случаях, когда необходимо настроить кодировку, используйте те же параметры, что и в вашем редакторе, чтобы предотвратить возникновение проблем.
Другие ресурсы о кодировках в PowerShell
Существует несколько других достойных публикаций на тему кодировок и настройки кодирования в PowerShell:
Устранение неполадок в объеме протестированного кода
Отображаемые сведения
При выборе команды Анализ покрытия кода в меню Тест (при условии успешной сборки и тестирования) в окне Покрытие кода должен отобразиться список результатов. Разверните элементы, чтобы просмотреть сведения о них.
Возможные причины отсутствия результатов или отображения старых результатов
Вы используете правильный выпуск Visual Studio?
Вам требуется Visual Studio Enterprise.
Тесты не выполнены
Анализ—Проверьте окно вывода. В раскрывающемся списке Показать выходные данные из: выберите Тесты. Проверьте, были ли зарегистрированы какие-либо предупреждения или ошибки.
Объяснение—Анализ покрытия кода выполняется во время выполнения тестов. Он включает только сборки, загруженные в память во время выполнения тестов. Если ни один из тестов не выполняется, это значит, что нет данных для включения в отчет о покрытии кода.
Решение—В обозревателе тестов щелкните Запустить все, чтобы проверить успешность выполнения тестов. Исправьте все ошибки перед выполнением команды Анализ покрытия кода.
Отображается предыдущий результат
При изменении и повторном выполнении тестов может по-прежнему отображаться предыдущий результат анализа покрытия кода, включая цветовую разметку предыдущего запуска.
Выполните команду Анализ покрытия кода.
Убедитесь в том, что в окне Результаты покрытия кода выбран последний набор результатов.
Недоступны PDB-файлы (файлы символов)
Анализ—Откройте предназначенную для компиляции папку (обычно это папка bin\debug) и убедитесь в том, что для каждой сборки существует PDB-файл в том же каталоге, что и DLL— или EXE-файл.
Объяснение—Анализатору объема протестированного кода необходимо, чтобы каждая сборка имела связанный с ней PDB-файл, доступный во время тестового запуска. Если PDB-файл не существует для определенной сборки, она не будет проанализирована.
PDB-файл должен быть создан из той же сборки, что и DLL— или EXE-файл.
Решение—Убедитесь в том, что в параметрах сборки указано создание PDB-файла. Если PDB-файлы не обновляются при сборке проекта, откройте свойства проекта, выберите страницу Сборка, щелкните Дополнительно и проверьте сведения в поле Отладочная информация.
Если PDB-файл и DLL— или EXE-файл находятся в разных местах, скопируйте PDB-файл в тот же каталог. Также можно настроить анализатор объема протестированного кода для поиска PDB-файлов в другом расположении. См. дополнительные сведения по настройке анализа объема протестированного кода.
Использование инструментированного или оптимизированного двоичного файла
Анализ—Определите, была ли выполнена какая-либо форма расширенной оптимизации двоичного файла, например профильная оптимизация, или было ли выполнено инструментирование двоичного файла с помощью средств профилирования, таких как vsinstr.exe или vsperfmon.exe.
Объяснение—Если сборка уже была инструментирована или оптимизирована другим средством профилирования, то она не учитывается в анализе покрытия кода. Для таких сборок невозможно выполнить анализ покрытия кода.
Решение—Отключите оптимизацию и используйте новую сборку.
Неуправляемый код (.NET) или машинный код (C++)
Анализ—Убедитесь, что выполняются тесты управляемого кода или кода C++.
Объяснение—Анализ покрытия кода в Visual Studio доступен только для управляемого и машинного кода (C++). При работе со средствами сторонних разработчиков часть кода или весь код может выполняться на другой платформе.
Сборка установлена с помощью NGen
Анализ—Убедитесь, что сборка не была загружена из кэша образов в машинном коде.
Объяснение—Из соображений производительности сборки образов в машинном коде не анализируются. См. дополнительные сведения о файле Ngen.exe (генераторе образов в машинном коде).
Решение—Используйте MSIL-версию сборки. Не обрабатывайте ее с помощью NGen.
Пользовательский RUNSETTINGS-файл с неверным синтаксисом
Анализ—Если используется пользовательский RUNSETTINGS-файл, он может содержать синтаксические ошибки. Покрытие кода не выполняется, и либо окно покрытия кода не открывается по завершении тестового запуска, либо в нем отображаются старые результаты.
Объяснение—Можно выполнить модульные тесты, используя пользовательский RUNSETTINGS-файл, чтобы настроить параметры объема протестированного кода. С помощью параметров можно включать или исключать файлы. См. дополнительные сведения по настройке анализа объема протестированного кода.
Решение—Существует два возможных типа ошибок:
Ошибка XML
Откройте RUNSETTINGS-файл в редакторе XML Visual Studio. Найдите ошибки.
Ошибка в регулярном выражении
Каждая строка в файле представляет собой регулярное выражение. Проверьте каждую строку на наличие ошибок, в частности, следующих:
Пользовательский RUNSETTINGS-файл с неверными исключениями
Анализ—Если используется пользовательский RUNSETTINGS-файл, проверьте, что он включает в себя вашу сборку.
Объяснение—Можно выполнить модульные тесты, используя пользовательский RUNSETTINGS-файл, чтобы настроить параметры объема протестированного кода. С помощью параметров можно включать или исключать файлы. См. дополнительные сведения по настройке анализа объема протестированного кода.
Убедитесь, что узел DataCollectors определяет покрытие кода. Сравните его с примером в разделе Настройка анализа объема протестированного кода.
Часть кода всегда отображается как непокрытая
Код инициализации в машинных библиотеках DLL выполняется до инструментирования
Анализ—В статически связанном машинном коде часть функции инициализации DllMain и вызываемый ею код иногда отображаются как непокрытые, даже если код выполнен.
Объяснение—Анализатор покрытия кода вставляет инструментирование в сборку непосредственно перед началом выполнения приложения. В любой сборке, загруженной до этого времени, код инициализации в DllMain выполняется сразу после загрузки сборки и до выполнения приложения. Этот код будет отображаться как не протестированный. Обычно это применяется к статически загружаемым сборкам.