Остановить автоматическое угадывание кодировки в VS Code

Остановить автоматическое угадывание кодировки в VS Code

Я использую VS Code для создания немецкого сайта. Я использую немецкий специальный символ в файле style.css. После перезапуска VS Code и изменения кодировки файла с UTF-8 на Windows-1252 я получаю то, что показано на изображении ниже.
Мой флажок Auto Guess Encoding не установлен, а кодировка по умолчанию — UTF-8.
Как остановить автоматическую смену кодировки? У меня версия VS Code 1.32.3, и я использую Windows 10.

скриншот_показ_символа_и_кодировки

решение1

Как остановить автоматическую смену кодировки?

- В соответствии сваш собственный комментарий,Автоматическое угадывание кодировкиужевыключенный
Тот факт, что VS Code кодирует ваш файл какWindows-1252 (кодовая страница 1252илиCP1252)
требует иного объяснения.

Предполагая, что у вас есть настройка VS Code, которая специально декодирует ваши CSS-файлы
какWindows-1252, мне удалось очень точно воспроизвести вашу ситуацию. 1

1. Воспроизведение всего сценария

Я используюупрощенная версия вашегоstyle.css, содержащий всего одну строку:

/* Ü */

Чтобы VS Code открыл файл с кодировкойWindows-1252 (с функцией автоматического угадывания кодировки)выключенный),
я предполагаю, что VS Code settings.jsonсодержит следующий код/строку: 2

"[css]": {"files.encoding": "windows1252"},

Такая настройка заставит VS Code кодировать все .cssфайлы как Windows-1252. 3

Если вы скачаетеstyle.css, затем щелкните правой кнопкой мыши и Открыть с помощью кода, ожидайте увидеть:

В кодировке Windows-1252 Ü отображается как Ãœ.

^ нажмите, чтобы увеличить

Причина, по которой вы видитедва Windows-1252символы – Ãœ– вместоодинокий UTF-8 Üхарактер, это то, чтоWindows-1252 считывает каждый байткак один символ – символы, не входящие в ASCII Ã, и œ.
UTF-8с другой стороны используетдва байтадля чтения одного не-ASCII символа, например Ü. 4

Ü1. а. Как правильно отображать

Чтобы немецкая буква Üотображалась правильно, нужно нажать:
Повторно открыть с кодировкой >UTF-8Угадано по содержанию.

«Повторно открыть с кодировкой» изменяет способ декодирования файла.

ВыбираяПовторно открыть с кодировкой не делаетизменить сам файл.
Он меняет то, как файлотображаетсяв VS Code – как это раскодировано.

1. б. Что вам следуетнетделать

У вас возникнут проблемы, если вместо этого вы нажмете:
Сохранить с кодировкой>UTF-8Угадано по содержанию.

Сохранить с кодировкой > **UTF-8 изменяет сам файл.

Этотделаетизменить файл – всене- Символы ASCII получают преобразованныйна соответствующие им символы UTF-8. Если вы сохраните файл, он сохранится с этими изменениями.

Когда вы сейчас закроете и снова откроете style.css, он снова будетзакодированныйкакWindows-1252.
(Почему? – Потому что именно это и говорит строка "[css]": {"files.encoding": "windows1252"},в VS Code!)settings.json

Вот что вы увидите.

Сохранить с кодировкой > **UTF-8 изменяет сам файл.

Обратите внимание, что Ãœна снимке экрана вашего вопроса отображаются те же символы.

Причина, по которой вы сейчас видитечетыресимволы вместодватакой же, как и прежде.
одинокий UTF-8символ Ã(2 байта) отображается как двасимволы Ã(все еще 2 байта) при декодировании с помощью Windows-1252.
И синглUTF-8символ œотображается как два Windows-1252персонажи Å“.

На этом я завершаю воспроизведение вашего сценария.

2. Как восстановить поврежденный файл

Учитывая, что вы хотите отобразить Üи не испорченные Ãœ, вам нужно: \

  1. конвертировать файл обратно,
  2. закодировать с помощьюUTF-8,
  3. закройте и снова откройте файл.

1. Конвертировать файл обратно

Вот как преобразовать поврежденное style.cssобратно в исходное состояние.
Начиная с предыдущего снимка экрана, в строке состояния нажмитеОкна 1252,
затемПовторно открыть с кодировкой, и наконецUTF-8.

Windows 1252 > Повторно открыть с кодировкой > UTF-8.

Ожидайте увидеть Ãœ. Файл все еще поврежден, так что теперьконвертироватьэто кWindows-1252 кликнув :
UTF-8 >Сохранятьс кодировкой > Windows 1252.

UTF-8 > Сохранить с кодировкой > Windows 1252.

Файл теперь преобразован обратно в исходное состояние.
Осталось толькодекодироватьэто правильно (сUTF-8).

2. Кодировать с помощью UTF-8

В settings.json, удалить "[css]": {"files.encoding": "windows1252"},.

3. Закройте и снова откройте файл.

Закройте и снова откройте style.css. Проверьте, что вы видитеUTF-8в строке состояния. Ожидайте увидеть:

Поврежденный файл восстановлен.

Ура! Миссия выполнена.

3. Кодирование и конвертация в Notepad++

Чтобы лучше понять разницу междудекодирование/кодированиеи конвертацияфайл, возможно, будет полезно увидеть, как это делается в другом универсальном текстовом редакторе:Блокнот++.
Этот полезный ответпоясняет разницу в поучительной картинке:

Разница между кодированием и конвертацией в Notepad++.

Кодированиев Notepad++ соответствуетОткрыть зановос кодировкой в VS Code, тогда как
Преобразованиев Notepad++ соответствует Сохранятьс кодировкойв VS Code.

4. ASCII, ANSI и UTF-8

Несколько фактов могут помочь понять, чтоASCII, АНСИ, иUTF-8являются.

  • Символ ASCII использует всего один байт.
    Или, если хотите, он использует семь из восьми бит байта – старший бит всегда равен нулю.
    Это соответствует 0-127 в десятичных числах, 0x00-0x7F в шестнадцатеричных числах
    и 0000 0000 - 0111 1111 в битах.

  • Оба ANSI/Windows-1252 и UTF-8 кодируют символ ASCII как сам символ ASCII.
    Например, символ (буква) kявляется чистым символом ASCII. Этоодин байт(восемь бит), который имеет десятичное число 107, шестнадцатеричное число 0x6B, в битах 0110 1011.
    Как следствие, неправильно говорить, что символ ASCII k- это нетсимвол ANSI, и не то, что этонетсимвол UTF-8. – Это и то, и другое!
    Если текстовый файл содержиттолькоСимволы ASCII, то кодировки ANSI и UTF-8 совпадают.
    Выне могуотличить одно от другого. Такой файлобаАНСИиВ кодировке UTF-8. 5

Таблица кодировок Windows-1252 (CP-1252).

^ нажмите, чтобы увеличить

Верхняя половинаWindows-1252Таблица выше соответствует числам от 0 до 127, а нижняя половина — числам от 128 до 255. Последние являются не-ASCIIАНСИперсонажиWindows-1252.


Фотография ниже взята из Таблицы символов UTF-8 и ASCII,
и отображает все этиWindows-1252еще раз символы, пронумерованные 128-255.

Символы Windows-1252 (CP-1252), не входящие в ASCII.


Если вы хотите узнать, сколько байт (ичтобайт) символ UTF-8 использует, попробуйтеэтот онлайн-инструмент.

Рекомендации


1 Я думаю, что представленный мной сценарий правдоподобно описывает то, чтомощь произошло.
Конечно, я не могу знать наверняка, что стало причиной вашей ситуации.

2 Чтобы открыть settings.json, нажмите Ctrl+ ,(запятая), а затем щелкнитеОткрыть настройкизначок в правом верхнем углу:

Открыть настройки (JSON)

На macOS используйте вместо Ctrl.

3 Термин «ANSI», используемый для обозначения кодовых страниц Windows, является исторической справкой […].
Microsoft по-прежнему используетANSI для Западной Европывзаимозаменяемо с Windows-1252, например, в их notepad.exeтекстовом редакторе, который обычно находится в C:\WINDOWS\System32. Это соглашение я тоже соблюдаю. Смотрите такжеэтот ответ.

4 Если быть точнее,каждый не-ASCII UTF-8 символ используетпо меньшей мере два (до четырех) байта.

5 Предположим, у вас есть текстовый файл, содержащийтолькочистые символы ASCII. Если вы открываете этот файл в каком-то текстовом редакторе, и в строке состояния указано ANSI, это не значит, что файлнетКодировка UTF-8. Это просто означает, что этот текстовый редактор использует ANSI в качестве своегопо умолчанию кодировка. Если бы кодировка по умолчанию была UTF-8, редактор бы отображал UTF-8 в строке состояниядля того же файла.

Связанный контент