Impeça o código VS de adivinhar automaticamente a codificação

Impeça o código VS de adivinhar automaticamente a codificação

Eu uso o VS Code para criar um site alemão. Eu uso um caractere especial alemão em um style.cssarquivo. Depois de reiniciar o VS Code e alterar a codificação do arquivo de UTF-8 para Windows-1252, obtenho o que é mostrado na imagem abaixo.
My Auto Guess Encoding está desmarcado e a codificação padrão é UTF-8.
Como posso interromper a codificação de alteração automática? Minha versão do VS Code 1.32.3 e eu uso o Windows 10.

captura de tela_mostrando_caractere_e_codificação

Responder1

Como posso interromper a codificação de alteração automática?

- De acordo comseu próprio comentário, oCodificação de adivinhação automáticajá estádesligado.
O fato de o VS Code codificar seu arquivo comoWindows-1252 (página de código 1252ouCP1252)
exige alguma outra explicação.

Supondo que você tenha uma configuração de código VS que decodifica especificamente seus arquivos CSS
como sendoWindows-1252, consegui reproduzir sua situação com muita precisão. 1

1. Reproduzindo todo o cenário

Eu uso umversão simplificada do seustyle.css, contendo apenas uma única linha:

/* Ü */

Para fazer o VS Code abrir o arquivo com codificaçãoWindows-1252 (com codificação de adivinhação automáticadesligado),
presumo que o código VS settings.jsoncontém o seguinte código/linha: 2

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

Tal configuração fará com que o VS Code codifique todos .cssos arquivos como Windows-1252. 3

Se você baixarstyle.css, clique com o botão direito e Abrir com código, espere ver:

Com a codificação Windows-1252, Ü é mostrado como Ãœ.

^ clique para ampliar

A razão pela qual você vêdois Windows-1252caracteres – Ãœ– em vez dosolteiro UTF-8 Üpersonagem, é issoWindows-1252 lê cada bytecomo um único caractere – os caracteres não-ASCII Ãe œ.
UTF-8por outro lado usadois bytespara ler um único caractere não ASCII como Ü. 4

1. uma. Como exibir Ücorretamente

Para que a letra alemã Üapareça corretamente, você precisa clicar em:
Reabrir com codificação >UTF-8Adivinhado pelo conteúdo.

'Reabrir com codificação' altera a forma como o arquivo é decodificado.

EscolhendoReabrir com codificação nãoaltere o próprio arquivo.
Isso muda a forma como o arquivo éexibidono VS Code – como é decodificado.

1.b. O que você deverianãofazer

Você terá um problema se clicar em:
Salvar com codificação>UTF-8Adivinhado pelo conteúdo.

Salvar com codificação> **UTF-8 altera o próprio arquivo.

Essefazalterar o arquivo – tudonão-Caracteres ASCII são obtidos convertidoaos seus caracteres UTF-8 correspondentes. Se você salvar o arquivo, ele será salvo com essas alterações.

Quando você fechar e reabrir style.css, será novamentecodificadocomoWindows-1252.
(Por quê? - Porque é exatamente isso que a linha "[css]": {"files.encoding": "windows1252"},diz settings.json ao VS Code!)

Aqui está o que você verá.

Salvar com codificação> **UTF-8 altera o próprio arquivo.

Observe como Ãœsão os mesmos caracteres exibidos na captura de tela da sua pergunta.

A razão pela qual você vê agoraquatropersonagens em vez dedoisé o mesmo de antes.
- Osolteiro UTF-8caractere Ã(2 bytes) é exibido como o doiscaracteres Ã(ainda 2 bytes) quando decodificados com Windows-1252.
E o solteiroUTF-8personagem œé exibido como os dois Windows-1252personagens Å“.

Isso completa minha reprodução do seu cenário.

2. Como reparar o arquivo corrompido

Dado que você deseja exibir Üe não o corrompido Ãœ, você precisa: \

  1. converta o arquivo de volta,
  2. codificar comUTF-8,
  3. feche e reabra o arquivo.

1. Converta o arquivo de volta

Veja como converter o corrompido style.cssde volta ao seu estado original.
A partir da captura de tela anterior, na barra de status, clique emJanelas 1252,
entãoReabrir com codificação, e finalmenteUTF-8.

Windows 1252 > Reabrir com codificação > UTF-8.

Espere ver Ãœ. O arquivo ainda está corrompido, então agoraconverterisso paraWindows-1252 Clicando :
UTF-8 >Salvarcom codificação > Windows 1252.

UTF-8 > Salvar com codificação > Windows 1252.

O arquivo agora foi convertido de volta ao seu estado original.
O que resta édecodificarcorretamente (comUTF-8).

2. Codifique com UTF-8

Em settings.json, exclua "[css]": {"files.encoding": "windows1252"},.

3. Feche e reabra o arquivo

Fechar e reabrir style.css. Verifique se você vêUTF-8na barra de status. Espere ver:

O arquivo corrompido foi restaurado.

Yay! Missão cumprida.

3. Codificação versus conversão no Notepad++

Para entender melhor a diferença entredecodificação/codificaçãoe convertendoum arquivo, pode ser útil ver como isso é feito em outro editor de texto versátil:Bloco de notas++.
Esta resposta útilexplica a diferença em uma imagem instrutiva:

A diferença entre codificação e conversão no Notepad++.

Codificaçãono Notepad++ corresponde aReabrircom codificação no código VS, enquanto
Convertendono Notepad++ corresponde a Salvarcom codificaçãono código VS.

4. ASCII, ANSI e UTF-8

Alguns fatos podem ajudar a entender o queASCII, ANSI, eUTF-8são.

  • Um caractere ASCII usa apenas um único byte.
    Ou, se preferir, ele usa sete dos oito bits de um byte – o bit mais significativo é sempre zero.
    Isso corresponde a 0-127 em números decimais, 0x00-0x7F em números hexadecimais
    e 0000 0000 - 0111 1111 em bits.

  • Tanto ANSI/Windows-1252 quanto UTF-8 codificam um caractere ASCII como o próprio caractere ASCII.
    Por exemplo, o caractere (letra) ké um caractere ASCII puro. Isso éum byte(oito bits) que tem o número decimal 107, o número hexadecimal é 0x6B, em bits 0110 1011.
    Como consequência, é errado dizer que o caractere ASCII ké nãoum caractere ANSI, nem que sejanãoum caractere UTF-8. – São os dois!
    Se um arquivo de texto contiverapenasCaracteres ASCII, as codificações ANSI e UTF-8 coincidem.
    Vocênão podedistinguir um do outro. Tal arquivo éambosANSIeCodificado em UTF-8. 5

A tabela de codificação windows-1252 (CP-1252).

^ clique para ampliar

A metade superior doWindows-1252a tabela acima corresponde aos números 0-127 e a metade inferior aos números 128-255. Estes últimos são os não-ASCIIANSIpersonagens deWindows-1252.


A foto abaixo foi tirada de Gráficos de caracteres UTF-8 e ASCIIe
exibe todos aquelesWindows-1252caracteres mais uma vez, numerados de 128 a 255.

Os caracteres não ASCII do windows-1252 (CP-1252).


Se você quiser saber quantos bytes (eo quebytes) um caractere UTF-8 usa, tenteesta ferramenta on-line.

Referências


1 Acho que o cenário que apresento descreve de forma plausível o quepoder Aconteceu.
É claro que não posso saber ao certo o que causou a sua situação.

2 Para abrir settings.json, pressione Ctrl+ ,(vírgula) e clique no botãoAbrir configuraçõesícone no canto superior direito:

Abra Configurações (JSON)

No macOS, use em vez de Ctrl.

3 O termo “ANSI” usado para significar páginas de código do Windows é uma referência histórica [...].
A Microsoft ainda usaANSI para Europa Ocidentalintercambiavelmente com Windows-1252, por exemplo, em seu notepad.exeeditor de texto, normalmente localizado em C:\WINDOWS\System32. Esta é a convenção que sigo também. Veja tambémesta resposta.

4 Para ser mais preciso,cada caractere UTF-8 não ASCII usapelo menos dois (até quatro) bytes.

5 Suponha que você tenha um arquivo de texto contendoapenascaracteres ASCII puros. Se você abrir esse arquivo em algum editor de texto e a barra de status indicar ANSI, isso não significa que o arquivo estejanãoCodificado em UTF-8. Significa apenas que este editor de texto usa ANSI como seupadrão codificação. Se a codificação padrão fosse UTF-8, o editor exibiria UTF-8 na barra de statuspara o mesmo arquivo.

informação relacionada