Я использую 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символы – Ãœ
– вместоодинокий UTF-8 Ü
характер, это то, чтоWindows-1252
считывает каждый байткак один символ – символы, не входящие в ASCII
Ã
, и œ
.
UTF-8с другой стороны используетдва байтадля чтения одного не-ASCII символа, например Ü
.
4
Ü
1. а. Как правильно отображать
Чтобы немецкая буква Ü
отображалась правильно, нужно нажать:
Повторно открыть с кодировкой >UTF-8Угадано по содержанию.
ВыбираяПовторно открыть с кодировкой не делаетизменить сам файл.
Он меняет то, как файлотображаетсяв VS Code – как это
раскодировано.
1. б. Что вам следуетнетделать
У вас возникнут проблемы, если вместо этого вы нажмете:
Сохранить с кодировкой>UTF-8Угадано по содержанию.
Этотделаетизменить файл – всене- Символы ASCII получают преобразованныйна соответствующие им символы UTF-8. Если вы сохраните файл, он сохранится с этими изменениями.
Когда вы сейчас закроете и снова откроете style.css
, он снова будетзакодированныйкакWindows-1252.
(Почему? – Потому что именно это и говорит строка "[css]": {"files.encoding": "windows1252"},
в VS Code!)settings.json
Вот что вы увидите.
Обратите внимание, что Ãœ
на снимке экрана вашего вопроса отображаются те же символы.
Причина, по которой вы сейчас видитечетыресимволы вместодватакой же, как и прежде.
–одинокий UTF-8символ Ã
(2 байта) отображается как
двасимволы Ã
(все еще 2 байта) при декодировании с помощью
Windows-1252.
И синглUTF-8символ œ
отображается как два
Windows-1252персонажи Å“
.
На этом я завершаю воспроизведение вашего сценария.
2. Как восстановить поврежденный файл
Учитывая, что вы хотите отобразить Ü
и не испорченные Ãœ
, вам нужно: \
- конвертировать файл обратно,
- закодировать с помощьюUTF-8,
- закройте и снова откройте файл.
1. Конвертировать файл обратно
Вот как преобразовать поврежденное style.css
обратно в исходное состояние.
Начиная с предыдущего снимка экрана, в строке состояния нажмитеОкна 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++ соответствуетОткрыть зановос кодировкой
в 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.
Как следствие, неправильно говорить, что символ ASCIIk
- это нетсимвол ANSI, и не то, что этонетсимвол UTF-8. – Это и то, и другое!
Если текстовый файл содержиттолькоСимволы ASCII, то кодировки ANSI и UTF-8 совпадают.
Выне могуотличить одно от другого. Такой файлобаАНСИиВ кодировке UTF-8. 5
^ нажмите, чтобы увеличить
Верхняя половинаWindows-1252Таблица выше соответствует числам от 0 до 127, а нижняя половина — числам от 128 до 255. Последние являются не-ASCIIАНСИперсонажиWindows-1252.
Фотография ниже взята из
Таблицы символов UTF-8 и ASCII,
и отображает все этиWindows-1252еще раз символы, пронумерованные 128-255.
Если вы хотите узнать, сколько байт (ичтобайт) символ UTF-8 использует, попробуйтеэтот онлайн-инструмент.
Рекомендации
- style.css | содержащий только
/* Ü */
- Пост со ссылкой на Кэти Виссинк, Microsoft
- Каждый символ UTF-8, не входящий в ASCII, используетпо меньшей мередва (до четырех) байта
- Таблица американского стандартного кода для обмена информацией
- Ответ на вопрос, что такое ANSI | таблица в разделе 3
- Формат преобразования Unicode - 8 бит, объяснение
- Таблица кодировок Windows-1252 (CP-1252)
- Notepad++ | страница загрузки
- Как преобразовать ANSI в UTF-8 в Notepad++
- Таблицы символов UTF-8 и ASCII
- Конвертер UTF-8 в байты (шестнадцатеричные)
1
Я думаю, что представленный мной сценарий правдоподобно описывает то, чтомощь
произошло.
Конечно, я не могу знать наверняка, что стало причиной вашей ситуации.
2
Чтобы открыть settings.json
, нажмите Ctrl+ ,(запятая), а затем щелкнитеОткрыть настройкизначок в правом верхнем углу:
На 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 в строке состояниядля того же файла.