Volver al blog

Subtítulos con caracteres raros: arregla la codificación

Subtítulos con caracteres raros (é, þ, �, ???): es la codificación. Averigua la página de códigos y pásalos a UTF-8 con el Bloc de notas o FFmpeg.

3 de noviembre de 2026
Sablate Team

Los subtítulos muestran caracteres raros cuando el reproductor lee el archivo con una codificación de caracteres equivocada. año en lugar de año, rombos, signos de interrogación: cada patrón apunta a una causa concreta. La solución casi siempre es la misma: pasar el archivo a UTF-8, o indicar al reproductor qué página de códigos antigua usa.

A continuación: cómo leer el texto roto, en qué página de códigos está probablemente tu archivo, tres formas de arreglarlo en Windows y Mac, por qué los cuadrados son otro problema y cómo evitar que vuelva a pasar.

¿Por qué los subtítulos muestran caracteres raros?

Un archivo .srt es texto sin formato, y el texto sin formato no dice con qué codificación se guardó. El reproductor tiene que adivinarlo. Prueba primero con UTF-8, la codificación que reúne todos los alfabetos, y cuando los bytes no son UTF-8 válido recurre a una codificación por defecto, normalmente la página de códigos antigua de Windows del ordenador donde se ejecuta.

Esas páginas de códigos antiguas son la raíz del problema. Antes de que UTF-8 fuera la norma, Windows guardaba el texto con una página de códigos por región: Windows-1252 para Europa occidental, 1254 para turco, 1251 para cirílico, 949 para coreano, 932 para japonés. Cada una reutiliza los mismos valores de byte para letras distintas. El byte que significa ş en un archivo turco significa þ en uno occidental.

La referencia de páginas de códigos de Microsoft lo plantea sin rodeos: estas páginas de códigos «pueden ser distintas en equipos diferentes, o cambiar en un mismo equipo, lo que provoca daños en los datos», y recomienda usar UTF-8. Un subtítulo hecho hace años en un PC turco o coreano y reproducido hoy en un portátil en inglés es justo ese caso.

El texto en sí casi siempre sigue en el archivo. Lo que falla es la lectura, y por eso la solución es rápida cuando sabes la página de códigos real del archivo.

Lo que te dice el texto roto

Cada síntoma tiene su propia causa. Estos ejemplos salen de archivos reales que codificamos y abrimos de la forma equivocada:

Lo que vesLo que pasóSolución
Déjà vu, ç, ö (dos símbolos por una letra)Un archivo UTF-8 se leyó como Windows-1252Pon el reproductor en UTF-8, o guarda el archivo como UTF-8 with BOM
Þu iþi çýðlýk, Ïðèâåò, Za¿ó³æ (letras equivocadas)Un archivo en la página de códigos turca, rusa o polaca se leyó como europeo occidentalConvierte de la página de códigos real a UTF-8
Rombos � o �ȳ��ϼ���Un archivo en una página de códigos antigua se leyó como UTF-8Convierte de la página de códigos real a UTF-8
??? donde deberían estar las letrasLas letras se borraron cuando alguien guardó el texto en una página de códigos que no las incluyeConsigue otra vez el archivo original; ninguna conversión las recupera
Cuadrados vacíos, el resto correctoLa fuente no tiene glifos para ese alfabeto; el texto está bienCambia la fuente

Las dos primeras filas son las más habituales, y son opuestas. En la primera, el archivo ya está bien y el que falla es el reproductor. En la segunda y la tercera, el archivo está en una página de códigos antigua, así que se rompe en todos los reproductores que no adivinan esa página. Convertirlo una vez a UTF-8 arregla todos los reproductores a la vez.

¿En qué página de códigos está tu archivo de subtítulos?

Te lo dice el idioma de los subtítulos. Un archivo que no es UTF-8 casi siempre está en la página de códigos antigua de Windows de su idioma:

Idioma de los subtítulosPágina de códigos antigua de WindowsNombre para FFmpeg
Inglés, francés, alemán, español, portugués, italiano1252CP1252
Polaco, checo, húngaro1250CP1250
Ruso, ucraniano, búlgaro1251CP1251
Griego1253CP1253
Turco1254CP1254
Árabe1256CP1256
Japonés932 (Shift-JIS)CP932
Coreano949CP949
Chino simplificado936 (GB2312)GB18030
Chino tradicional950 (Big5)CP950

GB18030 es el superconjunto de la página de códigos del chino simplificado, así que también lee archivos guardados como GBK o GB2312.

Para comprobar qué tienes, abre el archivo en el Bloc de notas de Windows: la barra de estado indica la codificación, y «ANSI» significa una página de códigos antigua. En un Mac, o en Git Bash en Windows, ejecuta:

file --mime-encoding subtitles.srt

utf-8 o us-ascii significa que el archivo está bien y que el fallo es del reproductor. iso-8859-1 o unknown-8bit significa una página de códigos antigua. La herramienta no puede decir cuál, así que guíate por el idioma de la tabla.

Tres formas de arreglar la codificación de los subtítulos

  1. Vuelve a guardar el archivo como UTF-8 en un editor de texto. Gratis y rápido para un solo archivo.
  2. Conviértelo con FFmpeg. Un solo comando, cualquier página de códigos, en Windows, Mac y Linux.
  3. Indica la codificación al reproductor o al codificador. No hay archivo nuevo, pero la solución se queda en ese único programa.

Las dos primeras te dan un archivo UTF-8 que se reproduce bien en todas partes. La tercera es un apaño para un programa en un ordenador.

Método 1: guardar el archivo de subtítulos como UTF-8 en el Bloc de notas o TextEdit

En Windows, abre el .srt en el Bloc de notas. Cuando un archivo no es UTF-8 válido, el Bloc de notas lo lee con la página de códigos de tu sistema Windows. Eso funciona si el archivo coincide con tu sistema: un archivo turco en un Windows turco se abre bien. Si el texto se ve bien, elige Archivo → Guardar como, pon Codificación en UTF-8 y guarda con otro nombre. Si el texto también se ve mal en el Bloc de notas, la página de códigos de tu sistema no es la del archivo, así que usa el Método 2.

En un Mac, TextEdit te deja elegir la codificación al abrir el archivo. La guía de Apple sobre los caracteres que no se muestran correctamente da los pasos: en el cuadro Abrir, haz clic en Show Options (Mostrar opciones) y elige una codificación en el menú Plain Text Encoding (codificación de texto sin formato). Elige la del idioma de los subtítulos, comprueba que el texto se lee bien y guarda una copia como UTF-8. La codificación por defecto al guardar está en TextEdit → Settings → Open and Save (Ajustes → Abrir y guardar), dentro de Plain Text File Encoding (codificación del archivo de texto sin formato).

Dos límites: es un archivo cada vez, y solo funciona cuando el texto se ve bien al abrirlo. No guardes nunca un archivo que todavía se ve roto: escribirías las letras equivocadas en UTF-8 para siempre.

Método 2: convertir subtítulos a UTF-8 con FFmpeg

FFmpeg lee un archivo de subtítulos en cualquier página de códigos que indiques con -sub_charenc, que la documentación de FFmpeg describe como «Set the input subtitles character encoding» (establece la codificación de caracteres de los subtítulos de entrada), y escribe la salida en UTF-8. Usa la línea de tu idioma. Ejecutamos cada una con archivos de prueba:

ffmpeg -sub_charenc CP1252 -i french.srt french-utf8.srt
ffmpeg -sub_charenc CP1250 -i polish.srt polish-utf8.srt
ffmpeg -sub_charenc CP1251 -i russian.srt russian-utf8.srt
ffmpeg -sub_charenc CP1253 -i greek.srt greek-utf8.srt
ffmpeg -sub_charenc CP1254 -i turkish.srt turkish-utf8.srt
ffmpeg -sub_charenc CP1256 -i arabic.srt arabic-utf8.srt
ffmpeg -sub_charenc CP932 -i japanese.srt japanese-utf8.srt
ffmpeg -sub_charenc CP949 -i korean.srt korean-utf8.srt
ffmpeg -sub_charenc GB18030 -i chinese.srt chinese-utf8.srt
ffmpeg -sub_charenc CP950 -i chinese-traditional.srt chinese-traditional-utf8.srt

-sub_charenc tiene que ir antes de -i. Si lo omites, FFmpeg se detiene con este error, que además es una forma de saber que el archivo no es UTF-8:

Invalid UTF-8 in decoded subtitles text; maybe missing -sub_charenc option

Si la salida sigue mostrando letras equivocadas, la suposición fue errónea. Prueba con la página de códigos vecina de la tabla. Un archivo cirílico leído como CP1251 nunca puede salir como turco, así que un error se nota a simple vista.

El mismo comando funciona en Windows, Mac y Linux, y FFmpeg es gratuito.

Método 3: definir la codificación en VLC, HandBrake o en la incrustación con FFmpeg

Cuando prefieres no crear un archivo nuevo, díselo al programa que lo lee.

VLC. La página sobre la codificación de subtítulos de la wiki de VideoLAN da la ruta: Tools → Preferences (Herramientas → Preferencias), después Subtitles / OSD → Default encoding. Elige la página de códigos, pulsa Save (Guardar) y reinicia VLC. Esto sirve para la segunda y la tercera fila de la tabla de síntomas. Cambia VLC solo en ese ordenador: el mismo archivo seguirá fallando en un televisor, un móvil o un servidor multimedia.

HandBrake. Al importar un SRT en la pestaña Subtitles, la documentación de HandBrake indica «asegúrate de que el código de caracteres correcto está seleccionado en el desplegable “Char Code”», y avisa de que el incorrecto «hará que tu archivo de salida no tenga pista de subtítulos».

Incrustación con FFmpeg. El filtro subtitles tiene su propia opción charenc, así que puedes incrustar en la imagen un archivo con una página de códigos antigua directamente:

ffmpeg -i video.mp4 -vf "subtitles=turkish.srt:charenc=CP1254" -c:a copy output.mp4

En un Mac, el ffmpeg por defecto de Homebrew no incluye libass e informa de que el filtro subtitles no existe; instala ffmpeg-full y ejecuta su binario desde $(brew --prefix ffmpeg-full)/bin/ffmpeg. El resto de las opciones para incrustar están en nuestra guía para incrustar subtítulos en un vídeo.

Subtítulos con cuadrados en lugar de letras: un problema de fuente, no de codificación

Los cuadrados significan que el texto se leyó bien y que la fuente no tiene glifo para dibujarlo. Convertir el archivo no cambia nada aquí.

Cómo se manifiesta depende del renderizador. Incrustamos con FFmpeg en Windows un subtítulo en coreano con estilo Impact, una fuente solo latina: libass dibujó la coma y el punto en Impact y tomó el Hangul de otra fuente instalada. No hubo cuadrados, pero sí un aspecto mezclado que no habías elegido. Los cuadrados aparecen cuando ninguna fuente del equipo cubre el alfabeto, algo que pasa en servidores y en reproductores con un conjunto reducido de fuentes integradas.

La solución es indicar una fuente que cubra el idioma. En una incrustación con FFmpeg eso se hace con force_style:

ffmpeg -i video.mp4 -vf "subtitles=korean-utf8.srt:force_style='FontName=Malgun Gothic'" -c:a copy output.mp4

Qué fuente del sistema cubre cada alfabeto en Windows y Mac está en nuestra guía de fuentes para subtítulos.

Cómo gestiona Sablate la codificación y las fuentes de los subtítulos

Sablate escribe cada exportación de subtítulos, .srt, .vtt, .txt y .ass, en UTF-8. Una transcripción parte de Unicode, así que ninguna página de códigos entra nunca en el archivo, y la misma exportación se lee bien en coreano, turco o árabe.

Las fuentes se gestionan por idioma. Cada capa de traducción tiene su propio estilo, y cuando la fuente de subtítulos que elegiste no puede dibujar el alfabeto, Sablate sustituye una fuente que viene con el sistema: Malgun Gothic en Windows y Apple SD Gothic Neo en Mac para coreano, Yu Gothic UI y Hiragino Sans para japonés, Microsoft YaHei y PingFang SC para chino simplificado. La vista previa usa la misma fuente que la incrustación, así que lo que compruebas es lo que se renderiza.

Un límite honesto: la importación de .srt y .vtt de Sablate lee los archivos como UTF-8 y no detecta páginas de códigos antiguas. Convierte un archivo antiguo con el Método 1 o el Método 2 antes de importarlo. El resumen de funciones enumera el resto del editor y de las exportaciones.

Lee páginas de códigos antiguasQué obtienesPlataformasPrecio
NotepadSolo la página de códigos de tu sistemaUna copia del archivo en UTF-8WindowsGratis
TextEditSí, se elige al abrirUna copia del archivo en UTF-8MacGratis
FFmpegSí, cualquiera, con -sub_charenc o charencUna copia en UTF-8, o un vídeo con los subtítulos incrustadosWindows, Mac y LinuxGratis
VLCSí, con Default encodingReproducción correcta en ese ordenadorWindows, Mac y LinuxGratis
HandBrakeSí, con Char Code al importar el SRTUn vídeo con los subtítulos dentroWindows, Mac y LinuxGratis
SablateNo, solo importa UTF-8Exportaciones en UTF-8 y una fuente de incrustación por idiomaWindows y MacPlan gratuito; Pro $29 de pago único o $5.99 al mes

Para reparar un archivo existente, ganan las herramientas gratuitas: FFmpeg y TextEdit leen cualquier página de códigos antigua y Sablate no. Sablate encaja cuando estás creando los subtítulos, sobre todo en varios idiomas, y quieres archivos que nunca necesiten esta reparación.

¿Qué solución deberías usar?

«Un archivo se ve mal en VLC en mi propio ordenador.» Cambia el Default encoding de VLC, o convierte el archivo una vez y olvídate.

«Los subtítulos tienen que verse en un televisor, un móvil, Plex o YouTube.» Convierte a UTF-8 con el Método 1 o 2. Los demás dispositivos no comparten tus ajustes de VLC, y la página de YouTube sobre archivos de subtítulos dice que un SRT «debe estar en UTF-8 sin formato».

«Veo é y ö.» El archivo ya es UTF-8. Arregla el reproductor, o guarda una copia como UTF-8 with BOM en el Bloc de notas para que el archivo anuncie su codificación.

«Voy a incrustar los subtítulos.» Usa charenc en el comando de FFmpeg, o convierte primero, y después comprueba la fuente para ese idioma.

«Veo signos de interrogación.» Deja de convertir y busca el archivo original. Las letras ya no están en este.

Cómo evitar que los subtítulos vuelvan a romperse

Guarda todos los archivos de subtítulos como UTF-8. En el Bloc de notas es la opción Codificación de Guardar como; evita ANSI. En un Mac, define una sola vez UTF-8 como la codificación de guardado de TextEdit.

Convierte antes de editar. Editar un archivo roto y convertirlo después mezcla dos codificaciones en un mismo archivo, y el resultado es mucho más difícil de reparar.

Conserva el original hasta que la copia convertida se lea bien donde se va a reproducir de verdad: en el televisor, en el servidor multimedia, en la web. Si un dispositivo antiguo sigue leyendo mal el UTF-8, una copia guardada como UTF-8 with BOM suele resolverlo, porque el BOM marca el archivo como UTF-8 para los programas que, si no, lo adivinarían.

Cuando creas subtítulos desde cero, la codificación forma parte de hacerlos bien. Cómo crear un archivo SRT cubre las trampas del cuadro de guardado en Windows y Mac.

Si estás generando subtítulos en lugar de reparar los antiguos, empieza en una herramienta que escriba UTF-8 y elija una fuente por idioma por ti. Descarga Sablate para Windows o Mac y exporta tu primer archivo en cualquiera de sus 100 idiomas de transcripción.

Preguntas frecuentes

¿Por qué mis subtítulos muestran caracteres raros?

Porque el reproductor leyó el archivo con una codificación de caracteres equivocada. Un archivo de subtítulos no guarda qué codificación usa, así que el reproductor lo adivina, y si se equivoca convierte las letras con acento o no latinas en símbolos. Pasa el archivo a UTF-8, o indica al reproductor en qué página de códigos se guardó, y las letras vuelven.

¿Cómo convierto un archivo de subtítulos a UTF-8?

Ábrelo en un editor de texto que lo lea bien y guarda una copia como UTF-8, o ejecuta FFmpeg con la página de códigos antigua del archivo, por ejemplo ffmpeg -sub_charenc CP1254 -i input.srt output.srt para turco. FFmpeg escribe el archivo nuevo en UTF-8. Comprueba el resultado en tu reproductor antes de borrar el original.

¿Cómo cambio la codificación de los subtítulos en VLC?

Abre Herramientas, después Preferencias, después Subtítulos / OSD, y elige la página de códigos del archivo en la lista Default encoding. Pulsa Guardar y reinicia VLC para que el cambio surta efecto. El ajuste solo arregla la reproducción en VLC en ese ordenador, así que convierte el archivo a UTF-8 si también debe verse en un televisor, un móvil o una web.

¿Por qué los subtítulos muestran signos de interrogación en lugar de letras?

Porque las letras se perdieron al guardar el texto en una codificación que no tiene sitio para ellas. Un subtítulo en coreano o ruso guardado como texto de Europa occidental, por ejemplo, guarda un signo de interrogación por cada letra que no puede contener. Ninguna conversión las recupera, así que necesitas el archivo original o una exportación nueva desde la fuente.

¿Qué significa Invalid UTF-8 in decoded subtitles text en FFmpeg?

Significa que FFmpeg esperaba un archivo de subtítulos en UTF-8 y encontró bytes de una página de códigos antigua. El propio mensaje de FFmpeg sugiere la solución: añadir -sub_charenc con la codificación del archivo antes de -i, como CP1251 para ruso o CP949 para coreano, o usar la opción charenc del filtro subtitles cuando incrustas el archivo.

¿Qué codificación deben usar los archivos de subtítulos?

UTF-8. Reúne todos los alfabetos en una sola codificación, así que el mismo archivo se lee bien en cualquier idioma y en cualquier dispositivo. YouTube exige archivos SRT en UTF-8 sin formato, y los reproductores, los televisores y los servidores multimedia lo leen con mucha más fiabilidad que una página de códigos antigua de Windows. Si un dispositivo antiguo sigue leyéndolo mal, prueba a guardarlo como UTF-8 with BOM.