Eu uso o VS Code para criar um site alemão. Eu uso um caractere especial alemão em um style.css
arquivo. 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.
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.json
contém o seguinte código/linha:
2
"[css]": {"files.encoding": "windows1252"},
Tal configuração fará com que o VS Code codifique todos .css
os arquivos como
Windows-1252.
3
Se você baixarstyle.css
, clique com o botão direito e
Abrir com código, espere ver:
^ 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.
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.
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á.
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: \
- converta o arquivo de volta,
- codificar comUTF-8,
- feche e reabra o arquivo.
1. Converta o arquivo de volta
Veja como converter o corrompido style.css
de 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.
Espere ver Ü
. O arquivo ainda está corrompido, então agoraconverterisso paraWindows-1252
Clicando :
UTF-8 >Salvarcom 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:
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:
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 ASCIIk
é 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
^ 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.
Se você quiser saber quantos bytes (eo quebytes) um caractere UTF-8 usa, tenteesta ferramenta on-line.
Referências
- estilo.css | contendo apenas
/* Ü */
- Post citando Cathy Wissink, Microsoft
- Cada caractere UTF-8 não ASCII usapelo menosdois (até quatro) bytes
- Tabela do Código Padrão Americano para Intercâmbio de Informações
- Resposta para o que é ANSI | tabela na Seção 3
- Formato de transformação Unicode - 8 bits explicado
- A tabela de codificação do Windows-1252 (CP-1252)
- Bloco de notas++ | página de download
- Como converter ANSI para UTF-8 no Notepad++
- Gráficos de caracteres UTF-8 e ASCII
- Conversor de UTF-8 para bytes (hexadecimal)
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:
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.exe
editor 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.