Utilizo VS Code para crear un sitio en alemán. Utilizo un carácter especial alemán en un style.css
archivo. 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.
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.json
contiene el siguiente código/línea:
2
"[css]": {"files.encoding": "windows1252"},
Esta configuración hará que VS Code codifique todos .css
los archivos como
Windows-1252.
3
si descargasstyle.css
, luego haga clic derecho y
Abrir con código, espera ver:
^ 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.
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.
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.
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: \
- convertir el archivo de nuevo,
- codificar conUTF-8,
- 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.css
a 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.
Espere ver Ü
. El archivo todavía está dañado, así que ahoraconvertireso aWindows-1252
haciendo click :
UTF-8 >Ahorrarcon 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:
¡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:
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)k
es 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 ASCIIk
es 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.
Túno puedodistinguir uno del otro. Un archivo así esambosANSIyCodificado UTF-8. 5
^ 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.
Si desea saber cuántos bytes (yquébytes) utiliza un carácter UTF-8, intenteesta herramienta en línea.
Referencias
- estilo.css | que contiene sólo
/* Ü */
- Publicación que cita a Cathy Wissink, Microsoft
- Cada carácter no ASCII UTF-8 utilizaal menosdos (hasta cuatro) bytes
- Tabla del Código estándar americano para el intercambio de información
- Respuesta a qué es ANSI | tabla en la Sección 3
- Formato de transformación Unicode: explicación de 8 bits
- La tabla de codificación de Windows-1252 (CP-1252)
- Bloc de notas++ | pagina de descarga
- Cómo convertir ANSI a UTF-8 en Notepad++
- Gráficos de caracteres UTF-8 y ASCII
- Convertidor de UTF-8 a bytes (hexadecimal)
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:
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.exe
editor 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.