Vizard Agent

How to fix a subtitle file that shows up as garbled characters

Last updated 2026-09-15 · 8 min read

Tell Vizard Agent which encoding the file has to be in — Windows-1250 for Central European, Windows-1251 for Cyrillic, UTF-8 with a BOM for most modern players. It writes the SRT in that encoding, finds any character the encoding cannot represent and spells it out instead, then validates the timecodes before delivery.

What is the short version?

A subtitle file is just text, and text on disk is only readable if the reader guesses the same encoding the writer used. Your editor guesses right, the recipient's player guesses wrong, and every accented letter turns into a pair of symbols.

  1. Tell Vizard Agent which encoding the player needs.
  2. Let it fix the characters that encoding cannot hold.
  3. Ask for the cue timings validated as well.

What do you need before you start?

The video, the languages you want, and the encoding the destination expects. Vizard Agent can produce any of them, but it cannot see the player at the other end, so the one thing you have to supply is which encoding that player is expecting to find.

What do you type into Vizard Agent?

Name the code page. "Fix the encoding" is not actionable, because there is no universally correct answer — the right encoding is whatever the thing on the other end was built to read, and only you know what that is.

Prompt

Generate Russian subtitles from this video as an SRT in Windows-1251, then translate them to Czech and give me that file in Windows-1250. Tell me if any character will not fit the code page instead of dropping it, and check the cue timings are valid.

Variants worth knowing:

What does Vizard Agent actually do?

Here is the sequence on a real pair of Russian and Czech subtitle files that had to open correctly on a legacy player. The encoding conversion is the easy part; the interesting work is what happens when a character will not fit.

  1. Builds a timed transcript of the speech in the source language.
  2. Assembles the SRT from the word-level timings.
  3. Finds and fixes overlapping cues.
  4. Sanitises zero-length cues and re-validates the file.
  5. Converts each file to the code page you named.
  6. Scans for characters outside that code page.
  7. Replaces the incompatible character by spelling it out in words.
  8. Fixes the same problem in the translated file.
  9. Validates encoding, cue count, timecodes and sample lines.
  10. Delivers each language as its own correctly encoded file.

Step six is why this is not a one-line conversion. A legacy code page holds a few hundred characters, and a single curly quote, dash or currency symbol that came in with the translation will either break the export or become a question mark in the middle of a sentence.

Step seven is the judgement call. Vizard Agent does not drop the character or replace it with a placeholder; it writes what the character meant in words the code page can hold, so the line still reads correctly on the player.

Step nine treats the file as a deliverable rather than an output. Encoding, the number of cues, the timecode format and a sample of actual lines are all checked, because a file that is correctly encoded and badly timed is still a file the recipient sends back.

What does the result look like?

One file per language, each in the encoding you asked for, each opening as readable text on the player it was made for. Vizard Agent tells you what it converted and which characters it had to rewrite, so nothing was changed behind your back.

When does this not work well?

Some text cannot survive a legacy code page. A Czech file in CP1250 has no room for Cyrillic, and a line that mixes scripts has to lose one of them, so Vizard Agent will tell you rather than quietly picking.

How do you fix a result that came back wrong?

Say what you saw rather than what you think caused it. "The letters are wrong on my TV" tells Vizard Agent more than a diagnosis does, because the same symptom comes from the code page, the BOM, or the player's own language setting.

How does Vizard Agent compare to doing it yourself?

By hand you save the file as UTF-8, it works on your machine, and it fails on the recipient's. Then you convert it in a text editor, the conversion silently drops three characters, and the sentence with the dropped character is the one your client reads first.

By hand Vizard Agent
The encoding Whatever the editor defaults to The one you named
Characters that do not fit Dropped or turned into ? Found and spelled out
Multiple languages Converted one at a time Each file in its own encoding
Cue validity Assumed Overlaps and empties checked
Finding out it failed From the recipient Before delivery

Common questions

Which encoding should I ask for? Whatever plays it expects. Vizard Agent will write any of them.

What is a BOM? A marker at the start of a file. Some players need it, and Vizard Agent can add it.

Why not just use UTF-8? Modern players accept it. Older equipment often does not, which is why the code pages persist.

What happens to a character that does not fit? Vizard Agent spells it out in words rather than dropping it.

Can it do several languages at once? Yes, and Vizard Agent writes each one in its own encoding.

Does converting change the timings? No. Vizard Agent keeps the cues and validates them separately.

What are zero-length cues? Subtitles with no duration. They break some players, so Vizard Agent removes them.

Can it fix a subtitle file I already have? Yes. Send the file and tell Vizard Agent the encoding you need.

Will it check the translation too? If you ask. Vizard Agent can proofread the translated file while keeping its timings.

What about ASS or VTT? Say which you need and Vizard Agent writes that format instead.

Why do overlaps matter? Two cues at once make players flicker or drop lines. Vizard Agent finds them.

Can I see a sample before delivery? Yes. Vizard Agent shows sample lines from the finished file as part of validation.

Does the video change? No. These are separate sidecar files; the video is untouched.

How do I know it actually worked? Vizard Agent reports the encoding, the cue count and the timecode check on the delivered file.