Voltar ao blog

Legenda com caracteres estranhos? Corrija a codificação

Legenda com caracteres estranhos, como é, þ, � ou ???, tem problema de codificação. Ache a página de código, converta para UTF-8 no Bloco de Notas ou FFmpeg.

3 de novembro de 2026
Sablate Team

As legendas mostram caracteres estranhos quando o player lê o arquivo com a codificação de caracteres errada. ação em vez de ação, losangos, pontos de interrogação: cada padrão aponta para uma causa específica. A correção quase sempre é a mesma: converter o arquivo para UTF-8 ou informar ao player qual página de código antiga o arquivo usa.

A seguir: como ler o texto corrompido, em qual página de código seu arquivo provavelmente está, três formas de corrigir no Windows e no Mac, por que quadrados são outro problema e como evitar que isso volte a acontecer.

Por que as legendas mostram caracteres estranhos?

Um arquivo .srt é texto simples, e texto simples não diz em qual codificação foi salvo. O player precisa adivinhar. Ele tenta UTF-8, a codificação que comporta todos os alfabetos, e, quando os bytes não são UTF-8 válido, recorre a um padrão, geralmente a página de código antiga do Windows do computador em que está rodando.

Essas páginas de código antigas são a raiz do problema. Antes de o UTF-8 virar norma, o Windows guardava o texto em uma página de código por região: Windows-1252 para a Europa Ocidental, 1254 para turco, 1251 para cirílico, 949 para coreano, 932 para japonês. Cada uma reaproveita os mesmos valores de byte para letras diferentes. O byte que significa ş em um arquivo turco significa þ em um arquivo ocidental.

A referência de páginas de código da própria Microsoft descreve o problema sem rodeios: essas páginas de código "podem ser diferentes em computadores diferentes ou ser alteradas em um único computador, levando à corrupção de dados", e a empresa recomenda usar UTF-8. Uma legenda feita anos atrás em um PC turco ou coreano e reproduzida hoje em um notebook em inglês é exatamente esse caso.

O texto em si normalmente continua no arquivo. Só a leitura está errada, e é por isso que a correção é rápida quando você descobre a página de código real do arquivo.

O que o texto corrompido revela

Cada sintoma tem a sua causa. Estes exemplos vêm de arquivos reais que codificamos e abrimos do jeito errado:

O que você vêO que aconteceuCorreção
Déjà vu, ç, ö (dois símbolos para uma letra)Um arquivo UTF-8 foi lido como Windows-1252Defina o player como UTF-8 ou salve o arquivo em UTF-8 with BOM
Þu iþi çýðlýk, Ïðèâåò, Za¿ó³æ (letras erradas)Um arquivo de página de código turca, russa ou polonesa foi lido como europeu ocidentalConverta da página de código real para UTF-8
Losangos � ou �ȳ��ϼ���Um arquivo de página de código antiga foi lido como UTF-8Converta da página de código real para UTF-8
??? onde deveriam estar as letrasAs letras foram apagadas quando alguém salvou o texto em uma página de código que não as temObtenha o arquivo original de novo; nenhuma conversão as restaura
Quadrados vazios, o resto corretoA fonte não tem glifos para esse alfabeto; o texto está bomTroque a fonte

As duas primeiras linhas são as mais comuns, e são opostas. Na primeira, o arquivo já está correto e o player é que erra. Na segunda e na terceira, o arquivo está em uma página de código antiga, então quebra em todo player que não adivinha essa página de código. Convertê-lo uma vez para UTF-8 corrige todos os players ao mesmo tempo.

Em qual página de código está seu arquivo de legenda?

O idioma da legenda indica. Um arquivo que não é UTF-8 quase sempre está na página de código antiga do Windows para o seu idioma:

Idioma da legendaPágina de código antiga do WindowsNome para o FFmpeg
Inglês, francês, alemão, espanhol, português, italiano1252CP1252
Polonês, tcheco, húngaro1250CP1250
Russo, ucraniano, búlgaro1251CP1251
Grego1253CP1253
Turco1254CP1254
Árabe1256CP1256
Japonês932 (Shift-JIS)CP932
Coreano949CP949
Chinês simplificado936 (GB2312)GB18030
Chinês tradicional950 (Big5)CP950

GB18030 é um superconjunto da página de código do chinês simplificado, então também lê arquivos salvos como GBK ou GB2312.

Para conferir o que você tem, abra o arquivo no Bloco de Notas do Windows: a barra de status mostra a codificação, e "ANSI" significa uma página de código antiga. No Mac, ou no Git Bash no Windows, rode:

file --mime-encoding subtitles.srt

utf-8 ou us-ascii significa que o arquivo está bom e a falha é do player. iso-8859-1 ou unknown-8bit significa uma página de código antiga. A ferramenta não diz qual delas, então guie-se pelo idioma na tabela.

Três formas de corrigir a codificação da legenda

  1. Salvar o arquivo de novo em UTF-8 em um editor de texto. Grátis e rápido para um arquivo só.
  2. Convertê-lo com o FFmpeg. Um comando, qualquer página de código, no Windows, no Mac e no Linux.
  3. Informar a codificação ao player ou ao codificador. Nenhum arquivo novo, mas a correção fica restrita àquele programa.

As duas primeiras geram um arquivo UTF-8 que toca corretamente em qualquer lugar. A terceira é um paliativo para um programa em um computador.

Método 1: salvar a legenda em UTF-8 no Bloco de Notas ou no TextEdit

No Windows, abra o .srt no Bloco de Notas. Quando um arquivo não é UTF-8 válido, o Bloco de Notas o lê na página de código do seu sistema Windows. Isso funciona se o arquivo combina com o seu sistema: um arquivo turco em um Windows turco abre corretamente. Se o texto parecer certo, escolha Arquivo → Salvar como, defina Codificação como UTF-8 e salve com outro nome. Se o texto também parecer errado no Bloco de Notas, a página de código do seu sistema não é a do arquivo, então use o Método 2.

No Mac, o TextEdit deixa você escolher a codificação ao abrir o arquivo. O guia da Apple sobre caracteres que não aparecem corretamente traz os passos: na janela de abertura, clique em Show Options (Mostrar opções) e escolha uma codificação no menu Plain Text Encoding (Codificação de texto simples). Escolha a do idioma da legenda, confira se o texto está legível e depois salve uma cópia em UTF-8. A codificação padrão para salvar fica em TextEdit → Settings → Open and Save (Ajustes → Abrir e Salvar), na opção Plain Text File Encoding (codificação de arquivo de texto simples).

Dois limites: é um arquivo por vez, e só funciona quando o texto parece certo depois de aberto. Nunca salve um arquivo que ainda parece corrompido: você gravaria as letras erradas em UTF-8 para sempre.

Método 2: converter legendas para UTF-8 com o FFmpeg

O FFmpeg lê um arquivo de legenda em qualquer página de código que você indicar com -sub_charenc, que a documentação do FFmpeg descreve como "Defina a codificação de caracteres das legendas de entrada", e grava a saída em UTF-8. Use a linha do seu idioma. Rodamos cada uma delas em arquivos de teste:

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 precisa vir antes de -i. Se você o omitir, o FFmpeg para com este erro, que também é uma forma de saber que o arquivo não está em UTF-8:

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

Se a saída ainda mostrar letras erradas, o palpite estava errado. Tente a página de código vizinha da tabela. Um arquivo cirílico lido como CP1251 nunca vai sair como turco, então um palpite errado fica óbvio num relance.

O mesmo comando funciona no Windows, no Mac e no Linux, e o FFmpeg é grátis.

Método 3: definir a codificação no VLC, no HandBrake ou na legenda embutida do FFmpeg

Quando você prefere não criar um arquivo novo, informe a codificação ao programa que o lê.

VLC. A página sobre codificação de legendas da wiki do VideoLAN indica o caminho: Tools → Preferences (Ferramentas → Preferências) e depois Subtitles / OSD → Default encoding (Codificação padrão). Escolha a página de código, clique em Save e reinicie o VLC. Isso resolve a segunda e a terceira linhas da tabela de sintomas. Muda o VLC só naquele computador: o mesmo arquivo continua quebrando em uma TV, em um celular ou em um servidor de mídia.

HandBrake. Ao importar um SRT na aba Subtitles, a documentação do HandBrake diz para "confirmar que o código de caracteres correto está selecionado na lista 'Char Code'" e avisa que o errado "fará com que seu arquivo de saída fique sem faixa de legenda".

Legenda embutida com o FFmpeg. O filtro subtitles tem a própria opção charenc, então você pode embutir na imagem um arquivo de página de código antiga diretamente:

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

No Mac, o ffmpeg padrão do Homebrew não tem libass e informa que o filtro subtitles não existe; instale o ffmpeg-full e rode o binário dele em $(brew --prefix ffmpeg-full)/bin/ffmpeg. As demais opções para embutir legendas estão em nosso guia para embutir legendas em um vídeo.

Legendas com quadrados no lugar das letras: problema de fonte, não de codificação

Quadrados significam que o texto foi lido corretamente e a fonte não tem glifo para desenhá-lo. Converter o arquivo não muda nada aqui.

A aparência depende do renderizador. Embutimos uma legenda coreana com estilo em Impact, uma fonte só latina, usando o FFmpeg no Windows: o libass desenhou a vírgula e o ponto final em Impact e pegou o Hangul de outra fonte instalada. Sem quadrados, mas com um visual misturado que você não escolheu. Quadrados aparecem quando nenhuma fonte da máquina cobre o alfabeto, o que acontece em servidores e em players com um conjunto pequeno de fontes embutidas.

A solução é indicar uma fonte que cubra o idioma. Em uma legenda embutida com o FFmpeg, isso se faz com force_style:

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

Qual fonte do sistema cobre qual alfabeto no Windows e no Mac está listado em nosso guia de fontes para legendas.

Como o Sablate lida com codificação e fontes de legendas

O Sablate grava todas as exportações de legenda, .srt, .vtt, .txt e .ass, em UTF-8. Uma transcrição começa em Unicode, então nenhuma página de código chega a entrar no arquivo, e a mesma exportação é lida corretamente em coreano, turco ou árabe.

As fontes são tratadas por idioma. Cada camada de tradução tem o próprio estilo e, quando a fonte de legenda escolhida não consegue desenhar o alfabeto, o Sablate usa no lugar uma fonte que acompanha o sistema: Malgun Gothic no Windows e Apple SD Gothic Neo no Mac para coreano, Yu Gothic UI e Hiragino Sans para japonês, Microsoft YaHei e PingFang SC para chinês simplificado. A pré-visualização usa a mesma fonte da legenda embutida, então o que você confere é o que será renderizado.

Um limite honesto: a importação de .srt e .vtt do Sablate lê os arquivos como UTF-8 e não detecta páginas de código antigas. Converta um arquivo antigo com o Método 1 ou o Método 2 antes de importá-lo. A visão geral dos recursos lista o restante do editor e das exportações.

Lê páginas de código antigasO que você obtémPlataformasPreço
NotepadSó a página de código do seu sistemaUma cópia do arquivo em UTF-8WindowsGrátis
TextEditSim, escolhida ao abrirUma cópia do arquivo em UTF-8MacGrátis
FFmpegSim, qualquer uma, com -sub_charenc ou charencUma cópia em UTF-8 ou um vídeo com a legenda embutidaWindows, Mac e LinuxGrátis
VLCSim, com Default encodingReprodução correta naquele computadorWindows, Mac e LinuxGrátis
HandBrakeSim, com Char Code ao importar o SRTUm vídeo com as legendas embutidasWindows, Mac e LinuxGrátis
SablateNão, importa só UTF-8Exportações em UTF-8 e uma fonte de legenda embutida por idiomaWindows e MacPlano gratuito; Pro $29 uma única vez ou $5.99 por mês

Para reparar um arquivo existente, as ferramentas gratuitas levam a melhor: o FFmpeg e o TextEdit leem qualquer página de código antiga e o Sablate não. O Sablate faz sentido quando você está criando as legendas, principalmente em vários idiomas, e quer arquivos que nunca precisem desse reparo.

Qual correção usar?

"Um arquivo aparece errado no VLC, no meu próprio computador." Mude o Default encoding do VLC, ou converta o arquivo uma vez e esqueça o assunto.

"As legendas precisam funcionar em uma TV, em um celular, no Plex ou no YouTube." Converta para UTF-8 com o Método 1 ou 2. Os outros dispositivos não compartilham as configurações do seu VLC, e a página do YouTube sobre arquivos de legenda diz que um SRT "precisa estar em UTF-8 simples".

"Vejo é e ö." O arquivo já está em UTF-8. Corrija o player ou salve uma cópia em UTF-8 with BOM no Bloco de Notas, para que o arquivo anuncie a própria codificação.

"Estou embutindo as legendas." Use charenc no comando do FFmpeg ou converta antes e depois confira a fonte do idioma.

"Vejo pontos de interrogação." Pare de converter e procure o arquivo original. As letras não estão mais neste.

Como evitar que as legendas quebrem de novo

Salve todo arquivo de legenda em UTF-8. No Bloco de Notas, é a opção Codificação em Salvar como; evite ANSI. No Mac, defina uma vez a codificação de gravação do TextEdit como UTF-8.

Converta antes de editar. Editar um arquivo corrompido e só depois convertê-lo mistura duas codificações no mesmo arquivo, e o resultado é muito mais difícil de reparar.

Guarde o original até que a cópia convertida seja lida corretamente onde ela vai tocar de fato: na TV, no servidor de mídia, no site. Se um aparelho antigo ainda ler UTF-8 errado, uma cópia salva em UTF-8 with BOM costuma resolver, porque o BOM marca o arquivo como UTF-8 para os programas que, sem ele, adivinhariam.

Quando você cria legendas do zero, a codificação faz parte de acertar o trabalho. Como criar um arquivo SRT cobre as armadilhas da janela de salvar no Windows e no Mac.

Se você está gerando legendas em vez de reparar as antigas, comece por uma ferramenta que grava em UTF-8 e escolhe a fonte de cada idioma para você. Baixe o Sablate para Windows ou Mac e exporte seu primeiro arquivo em qualquer um dos 100 idiomas de transcrição.

Perguntas frequentes

Por que minhas legendas mostram caracteres estranhos?

Porque o player leu o arquivo com a codificação de caracteres errada. Um arquivo de legenda não registra qual codificação usa, então o player adivinha, e um palpite errado transforma letras acentuadas ou não latinas em símbolos. Converta o arquivo para UTF-8, ou informe ao player em qual página de código ele foi salvo, e as letras voltam.

Como converto um arquivo de legenda para UTF-8?

Abra o arquivo em um editor de texto que o leia corretamente e salve uma cópia em UTF-8, ou rode o FFmpeg com a página de código antiga do arquivo, por exemplo ffmpeg -sub_charenc CP1254 -i input.srt output.srt para turco. O FFmpeg grava o novo arquivo em UTF-8. Confira o resultado no seu player antes de apagar o original.

Como altero a codificação da legenda no VLC?

Abra Tools, depois Preferences, depois Subtitles / OSD, e escolha a página de código do arquivo na lista Default encoding. Clique em Save e reinicie o VLC para a mudança valer. A configuração só corrige a reprodução no VLC daquele computador, então converta o arquivo para UTF-8 se ele também precisar funcionar em uma TV, em um celular ou em um site.

Por que as legendas mostram pontos de interrogação no lugar das letras?

Porque as letras se perderam quando o texto foi salvo em uma codificação que não tem lugar para elas. Uma legenda coreana ou russa salva como texto da Europa Ocidental, por exemplo, grava um ponto de interrogação para cada letra que não consegue guardar. Nenhuma conversão traz as letras de volta, então você precisa do arquivo original ou de uma nova exportação da fonte.

O que significa Invalid UTF-8 in decoded subtitles text no FFmpeg?

Significa que o FFmpeg esperava um arquivo de legenda em UTF-8 e encontrou bytes de uma página de código mais antiga. A própria mensagem do FFmpeg sugere a correção: adicione -sub_charenc com a codificação do arquivo antes de -i, como CP1251 para russo ou CP949 para coreano, ou use a opção charenc do filtro subtitles ao embutir a legenda.

Qual codificação os arquivos de legenda devem usar?

UTF-8. Ele reúne todos os alfabetos em uma só codificação, então o mesmo arquivo é lido corretamente em qualquer idioma e em qualquer dispositivo. O YouTube exige arquivos SRT em UTF-8 simples, e players, TVs e servidores de mídia o leem com muito mais confiabilidade do que uma página de código antiga do Windows. Se um aparelho antigo ainda ler errado, tente salvar em UTF-8 with BOM.