Codificación de caracteres y texto ilegible
Al trabajar con texto en japonés (o con acentos y otros caracteres no ASCII) en el símbolo del sistema, es posible que aparezcan caracteres ilegibles. Ocurre con frecuencia al manejar archivos UTF-8 o al procesar la salida de otros programas.
Este artículo explica las causas del texto ilegible y cómo solucionarlo.
Por qué aparece texto ilegible
El texto ilegible aparece porque quien escribe el texto y quien lo lee usan codificaciones de caracteres distintas.
En Windows en japonés conviven las siguientes codificaciones.
| Codificación | Página de códigos | Descripción |
|---|---|---|
| Shift_JIS | 932 | Valor predeterminado de Windows en japonés |
| UTF-8 | 65001 | La opción predominante en la web y el desarrollo |
| UTF-16 | - | Usada internamente por Windows |
La página de códigos predeterminada del símbolo del sistema es 932 (Shift_JIS) en un Windows en japonés (en otros idiomas es otra, por ejemplo 850 u 437), pero los editores de texto y programas actuales suelen usar UTF-8 de forma predeterminada. Esta discrepancia es la causa principal del texto ilegible.
Comprobar la página de códigos actual
chcp
Cambiar la página de códigos (comando chcp)
El comando chcp cambia la página de códigos.
Cambiar a UTF-8
chcp 65001

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超 入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
Volver a Shift_JIS
chcp 932
La página de códigos cambiada con chcp solo es válida en esa ventana del símbolo del sistema. Al abrir una ventana nueva se vuelve a la página de códigos predeterminada.
Solucionar el texto ilegible en archivos por lotes
Solución 1: cuidado con la codificación al guardar el archivo por lotes
Un archivo por lotes debe guardarse con la misma codificación que la página de códigos del símbolo del sistema.
| Formato de guardado | Comportamiento |
|---|---|
| ANSI (Shift_JIS) | Funciona con la página de códigos predeterminada 932 |
| UTF-8 (sin BOM) | Se usa junto con chcp 65001 |
| UTF-8 (con BOM) | Pueden aparecer caracteres basura al principio |
Si guardas un archivo por lotes como UTF-8 con BOM, el BOM (Byte Order Mark) del inicio puede impedir que @echo off se reconozca correctamente. Al guardar como UTF-8, elige sin BOM.
Solución 2: cambiar chcp dentro del archivo por lotes
En un archivo por lotes que procesa archivos UTF-8, cambia la página de códigos al principio.
@echo off
setlocal
rem Guarda la página de códigos actual y cambia a UTF-8
for /f "tokens=2 delims=:" %%a in ('chcp') do set ORIG_CP=%%a
chcp 65001 >nul
rem Procesa el archivo UTF-8
type "utf8_data.txt"
rem Restaura la página de códigos original
chcp %ORIG_CP% >nul
endlocal
El texto de la salida de chcp varía según el idioma de la interfaz, pero el número de la página de códigos siempre va después de dos puntos (:), por lo que delims=: lo extrae como se muestra arriba. Guardar la página de códigos original permite restaurarla de forma fiable sin escribir 932 a mano.
Añadir >nul, como en chcp 65001 >nul, suprime el mensaje “Página de códigos activa: 65001”.
Ejecutar con chcp 65001 un archivo por lotes UTF-8 que contiene texto en japonés puede hacer que las etiquetas y goto se interpreten mal en versiones antiguas de Windows 10 y similares. Si distribuyes el archivo por lotes o no conoces el entorno de destino, guardar como Shift_JIS (Solución 3) es la opción segura.
Solución 3: guardar como Shift_JIS
Cuando el propio archivo por lotes contiene texto en japonés, el método más fiable es guardarlo como Shift_JIS (ANSI).
En Visual Studio Code, haz clic en el indicador de codificación de la esquina inferior derecha, elige “Guardar con codificación” y selecciona “Japanese (Shift JIS)”.
Usar UTF-8 como valor predeterminado en todo el sistema
En Windows 10 versión 1803 y posteriores (incluido Windows 11), puedes hacer que UTF-8 sea el valor predeterminado de todo el sistema desde la configuración regional.
- Abre Configuración → Hora e idioma → Idioma y región → Configuración de idioma administrativo (también se abre ejecutando
intl.cpl) - En la pestaña “Administrativa”, selecciona “Cambiar configuración regional del sistema”
- Marca “Beta: usar Unicode UTF-8 para la compatibilidad con idiomas de todo el mundo” y reinicia
Al activar esta opción, las aplicaciones antiguas y los archivos por lotes que presuponen Shift_JIS pueden mostrar texto ilegible. Como el impacto es amplio, comprueba primero si el problema se resuelve ajustando chcp o el formato de guardado.
Casos habituales de texto ilegible y soluciones
Caso 1: un archivo UTF-8 se ve ilegible con el comando type
chcp 65001 >nul
type "utf8_file.txt"
chcp 932 >nul
Caso 2: findstr no puede buscar texto en japonés
findstr usa la página de códigos del sistema, por lo que la búsqueda de texto en japonés en un archivo UTF-8 puede no funcionar correctamente.
chcp 65001 >nul
findstr "キーワード" "utf8_file.txt"
chcp 932 >nul
Con PowerShell, indicar la codificación de forma explícita es más fiable.
powershell -NoProfile -Command "Select-String -Path utf8_file.txt -Pattern 'キーワード' -Encoding utf8"
La compatibilidad de findstr con UTF-8 es incompleta, y las búsquedas con expresiones regulares de texto en japonés pueden no funcionar correctamente. Si necesitas una búsqueda fiable en texto UTF-8, considera el cmdlet Select-String de PowerShell.
Caso 3: la salida de otro programa se ve ilegible
La salida de programas que usan UTF-8 de forma predeterminada, como Python o Node.js, puede verse ilegible.
chcp 65001 >nul
python script.py
chcp 932 >nul
También puedes establecer la codificación de salida del programa mediante una variable de entorno.
set PYTHONIOENCODING=utf-8
python script.py
Esto hace que Python emita UTF-8. Funciona con canalizaciones y archivos, pero en pantalla el texto sigue viéndose ilegible si la página de códigos de la consola sigue siendo 932.
Caso 4: un archivo creado con redirección se ve ilegible
En Windows PowerShell 5.1, un archivo guardado con redirección (>) queda en UTF-16. Al abrirlo en otras herramientas puede verse ilegible o con un espacio entre cada carácter.
Al guardar desde PowerShell, indica la codificación de forma explícita, como en Out-File -Encoding utf8 o Set-Content -Encoding utf8. Ten en cuenta que -Encoding utf8 en Windows PowerShell 5.1 guarda con BOM.
Caso 5: el echo de un archivo por lotes se ve ilegible
Ocurre cuando la codificación con la que se guardó el archivo por lotes no coincide con la página de códigos del símbolo del sistema.
Haz coincidir el formato de guardado del archivo por lotes con la página de códigos del símbolo del sistema.
Configuración de la fuente
Si algunos caracteres no se muestran, la causa puede ser la fuente del símbolo del sistema.
- Haz clic con el botón derecho en la barra de título del símbolo del sistema
- Selecciona “Propiedades”
- En la pestaña “Fuente”, elige “MS Gothic” o “Consolas”
Windows Terminal (el terminal predeterminado en Windows 11 22H2 y posteriores) muestra bien UTF-8. Si el texto ilegible aparece con frecuencia, considera usar Windows Terminal.
Resumen
| Problema | Solución |
|---|---|
| Un archivo UTF-8 se muestra ilegible | Cambiar la página de códigos con chcp 65001 |
| El japonés de un archivo por lotes se ve mal | Guardarlo como Shift_JIS |
| La salida de otro programa se ve ilegible | chcp 65001 o un ajuste del propio programa |
| findstr no puede buscar japonés | Cambiar la página de códigos o usar PowerShell |
| Problemas con UTF-8 con BOM | Guardar como UTF-8 sin BOM |
La mayoría de los casos de texto ilegible se resuelven haciendo coincidir las codificaciones de quien escribe y de quien lee.