Evite que VS Code adivine automáticamente la codificación

Evite que VS Code adivine automáticamente la codificación

Utilizo VS Code para crear un sitio en alemán. Utilizo un carácter especial alemán en un style.cssarchivo. Después de reiniciar VS Code y cambiar la codificación del archivo de UTF-8 a Windows-1252, obtengo lo que se muestra en la imagen a continuación.
Mi codificación Auto Guess está desmarcada y la codificación predeterminada es UTF-8.
¿Cómo puedo detener la codificación de cambio automático? Mi versión de VS Code 1.32.3 y uso Windows 10.

captura de pantalla_que muestra_el_carácter_y_codificación

Respuesta1

¿Cómo puedo detener la codificación de cambio automático?

- De acuerdo atu propio comentario, elCodificación automática de adivinaciónya estáapagado.
El hecho de que VS Code codifique su archivo comoWindows-1252 (página de códigos 1252oCP1252)
exige alguna otra explicación.

Suponiendo que tiene una configuración de VS Code que decodifica específicamente sus archivos CSS
como si fueranWindows-1252, He podido reproducir su situación con mucha precisión. 1

1. Reproducir todo el escenario.

Uso unversión simplificada de sustyle.css, que contiene solo una línea:

/* Ü */

Para hacer que VS Code abra el archivo con codificaciónWindows-1252 (con codificación Auto Guessapagado),
supongo que el código VS settings.jsoncontiene el siguiente código/línea: 2

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

Esta configuración hará que VS Code codifique todos .csslos archivos como Windows-1252. 3

si descargasstyle.css, luego haga clic derecho y Abrir con código, espera ver:

Con la codificación Windows-1252, Ü se muestra como Ãœ.

^ haga clic para ampliar

La razón por la que vesdos Windows-1252caracteres – Ãœ– en lugar de lossoltero UTF-8 Üpersonaje, es queWindows-1252 lee cada bytecomo un solo carácter: los caracteres que no son ASCII Ãy œ.
UTF-8por otro lado utilizados bytespara leer un solo carácter que no sea ASCII como Ü. 4

1. a. Cómo mostrar Ücorrectamente

Para que la letra alemana Üaparezca correctamente, debe hacer clic en:
Reabrir con codificación >UTF-8Adivinado por el contenido.

'Reabrir con codificación' cambia la forma en que se decodifica el archivo.

EligiendoReabrir con codificación nocambiar el archivo en sí.
Cambia como esta el archivodesplegadoen VS Code: cómo es descifrado.

1.b. lo que deberíasnohacer

Obtendrá un problema si en su lugar hace clic en:
Guardar con codificación>UTF-8Adivinado por el contenido.

Guardar con codificación > **UTF-8 cambia el archivo en sí.

Estehacecambiar el archivo – todono-Los caracteres ASCII obtienen convertidoa sus correspondientes caracteres UTF-8. Si guarda el archivo, se guarda con estos cambios.

Cuando cierre y vuelva a abrir style.css, volverá a sercodificadocomoWindows-1252.
(¿Por qué? – ¡Porque eso es exactamente lo que la línea "[css]": {"files.encoding": "windows1252"},le settings.json dice a VS Code!)

Esto es lo que verás.

Guardar con codificación > **UTF-8 cambia el archivo en sí.

Observe cómo Ãœson los mismos caracteres que se muestran en la captura de pantalla de su pregunta.

La razón por la que ahora vescuatropersonajes en lugar dedosEs el mismo que antes.
- Elsoltero UTF-8carácter Ã(2 bytes) se muestra como el doscaracteres Ã(todavía 2 bytes) cuando se decodifica con Windows-1252.
y el solteroUTF-8El carácter œse muestra como los dos. Windows-1252caracteres Å“.

Esto completa mi reproducción de su escenario.

2. Cómo reparar el archivo dañado

Dado que desea mostrar Üy no el corrupto Ãœ, necesita: \

  1. convertir el archivo de nuevo,
  2. codificar conUTF-8,
  3. cierre y vuelva a abrir el archivo.

1. Vuelva a convertir el archivo

A continuación se explica cómo convertir lo dañado style.cssa su estado original.
A partir de la captura de pantalla anterior, en la barra de estado, haga clic enventanas 1252,
entoncesReabrir con codificación, y finalmenteUTF-8.

Windows 1252 > Reabrir con codificación > UTF-8.

Espere ver Ãœ. El archivo todavía está dañado, así que ahoraconvertireso aWindows-1252 haciendo click :
UTF-8 >Ahorrarcon codificación > Windows 1252.

UTF-8 > Guardar con codificación > Windows 1252.

El archivo ahora se ha convertido a su estado original.
Lo que queda esdescodificarcorrectamente (conUTF-8).

2. Codificar con UTF-8

En settings.json, eliminar "[css]": {"files.encoding": "windows1252"},.

3. Cierra y vuelve a abrir el archivo.

Cerrar y volver a abrir style.css. Comprueba que vesUTF-8en la barra de estado. Espere ver:

El archivo dañado ha sido restaurado.

¡Hurra! Misión cumplida.

3. Codificar versus convertir en Notepad++

Para comprender mejor la diferencia entredecodificar/codificary mudadoun archivo, podría ser útil ver cómo se hace esto en otro editor de texto versátil:Bloc de notas++.
Esta respuesta útilexplica la diferencia en una imagen instructiva:

La diferencia entre codificar y convertir en Notepad++.

Codificaciónen Notepad++ corresponde aReabrircon codificación en VS Code, mientras que
Mudadoen Notepad++ corresponde a Ahorrarcon codificaciónen código VS.

4. ASCII, ANSI y UTF-8

Algunos hechos pueden ayudar a comprender lo queASCII, ANSI, yUTF-8son.

  • Un carácter ASCII utiliza solo un byte.
    O si lo prefiere, utiliza siete de los ocho bits de un byte; el bit más significativo siempre es cero.
    Esto corresponde a 0-127 en números decimales, 0x00-0x7F en números hexadecimales
    y 0000 0000 - 0111 1111 en bits.

  • Tanto ANSI/Windows-1252 como UTF-8 codifican un carácter ASCII como el propio carácter ASCII.
    Por ejemplo, el carácter (letra) kes un carácter ASCII puro. Esto esun byte(ocho bits) que tiene el número decimal 107, el número hexadecimal es 0x6B, en los bits 0110 1011.
    Como consecuencia, es incorrecto decir que el carácter ASCII kes noun carácter ANSI, ni que seanoun carácter UTF-8. - ¡Son ambos!
    Si un archivo de texto contienesoloCaracteres ASCII, entonces coinciden las codificaciones ANSI y UTF-8.
    no puedodistinguir uno del otro. Un archivo así esambosANSIyCodificado UTF-8. 5

La tabla de codificación windows-1252 (CP-1252).

^ haga clic para ampliar

La mitad superior delWindows-1252la tabla de arriba corresponde a los números 0-127, y la mitad inferior a los números 128-255. Estos últimos son los no ASCII.ANSIpersonajes deWindows-1252.


La imagen de abajo está tomada de Gráficos de caracteres UTF-8 y ASCIIy
muestra todos aquellosWindows-1252caracteres una vez más, numerados 128-255.

Los caracteres no ASCII de Windows-1252 (CP-1252).


Si desea saber cuántos bytes (yquébytes) utiliza un carácter UTF-8, intenteesta herramienta en línea.

Referencias


1 Creo que el escenario que presento describe de manera plausible lo quepodría ha pasado.
Por supuesto, no puedo saber con certeza qué causó su situación.

2 Para abrir settings.json, presione Ctrl+ ,(coma) y luego haga clic en elConfiguración abiertaicono en la esquina superior derecha:

Abrir configuración (JSON)

En macOS, utilice en lugar de Ctrl.

3 El término "ANSI", tal como se utiliza para indicar las páginas de códigos de Windows, es una referencia histórica […].
Microsoft todavía usaANSI para Europa Occidentalindistintamente con Windows-1252, por ejemplo en su notepad.exeeditor de texto, normalmente ubicado en C:\WINDOWS\System32. Esta es la convención que sigo también. Ver tambiénesta respuesta.

4 Para ser más precisos,cada carácter no ASCII UTF-8 utilizaal menos dos (hasta cuatro) bytes.

5 Suponga que tiene un archivo de texto que contienesolocaracteres ASCII puros. Si abre ese archivo en algún editor de texto y la barra de estado dice ANSI, eso no significa que el archivo seanoCodificado UTF-8. Simplemente significa que este editor de texto utiliza ANSI como supor defecto codificación. Si la codificación predeterminada fuera UTF-8, el editor mostraría UTF-8 en la barra de estado.para el mismo archivo.

información relacionada