# Why subtitles show strange characters (and how to fix them on Mac)

> Why do subtitle files show strange symbols and question marks? Learn how character encodings cause mojibake and how to convert subtitles to UTF-8 on Mac.

Published 2026-10-31 · Formats & codecs · https://www.hazenstudio.com/maclc/blog/fix-garbled-subtitles/

## In short

- Garbled characters (mojibake) happen when a player decodes a subtitle file with the wrong character encoding.
- Accented vowels break when single-byte Windows-1252 files are parsed by modern UTF-8 decoders.
- Arabic, Hebrew, and Cyrillic subtitles require UTF-8 encoding and bidirectional text shaping.
- You can convert corrupted subtitle files to clean UTF-8 on macOS using TextEdit or the iconv command.
- MacLC reads text subtitles in any character encoding.

Subtitles display strange characters, black diamonds with question marks, or random symbols when there is a mismatch between the character encoding used to save the subtitle file and the character encoding used by your media player to decode it.

This visual corruption is known across computer science as mojibake (a Japanese term meaning character transformation). It does not mean your video file is broken or that your download is infected. It means your media player's text engine is reading the file's raw binary bytes through the wrong language alphabet table.

## What causes garbled subtitle characters and mojibake?

Computers do not store human letters, vowels, or punctuation marks directly on disk. They store numbers as binary bytes. A character encoding is an agreed-upon dictionary that maps specific numerical byte values to visible typographical symbols.

In the early days of personal computing, digital text relied on 7-bit ASCII, which could represent only 128 characters—enough for English letters, numbers, and basic punctuation. To accommodate non-English languages, operating systems created 8-bit code pages containing 256 character positions:

- **Windows-1252 (CP-1252):** Standard for Western European languages (French, Spanish, German).
- **Windows-1256:** Standard for Arabic script.
- **Windows-1251:** Standard for Cyrillic alphabets (Russian, Ukrainian, Bulgarian).
- **Windows-1253:** Standard for Greek.
- **Shift-JIS:** Standard for Japanese.

Problems occur because these legacy code pages reuse the exact same numerical byte values for completely different letters. In Windows-1252, byte `0xE9` represents the French accented vowel `é`. In Windows-1256, that identical byte `0xE9` represents the Arabic letter Dal (`د`). In Windows-1251, byte `0xE9` represents the Cyrillic small letter I (`и`).

Modern operating systems and open-source standards solved this chaos by adopting **UTF-8**, defined in [RFC 3629](https://datatracker.ietf.org/doc/html/rfc3629). UTF-8 is a universal variable-width encoding that represents over 150,000 characters from every living and historical language using sequences of one to four bytes.

```text
How Mojibake Happens:
Original French text:    café
UTF-8 byte sequence:     0x63 0x61 0x66 0xC3 0xA9
Interpreted as CP-1252:  c    a    f    Ã    ©     --> Displays as "cafÃ©"
```

If a community contributor saved an SRT file using legacy Windows-1252, and your modern Mac video player assumes the file is UTF-8, the decoder encounters single-byte values where it expects multi-byte sequences. It fails to parse the letters, outputting garbled text like `cafÃ©` instead of `café`, or replacing letters with the Unicode Replacement Character (``).

## Which languages break most often in subtitle files?

Character encoding mismatches disproportionately affect languages that utilize accent marks, non-Latin alphabets, or right-to-left scripts.

| Language Family | Common Legacy Encoding | Typical Mojibake Symptoms | Root Cause |
| :--- | :--- | :--- | :--- |
| **Western European** (French, Spanish, German) | Windows-1252 / ISO-8859-1 | `cafÃ©`, `aÃ±o`, `straÃŸe` | UTF-8 parser misreading single-byte accents as two CP-1252 symbols |
| **Arabic** | Windows-1256 | `ÇáÚÑÈíÉ` or disconnected backward letters | Single-byte Arabic code points parsed through Latin tables |
| **Cyrillic** (Russian, Ukrainian) | Windows-1251 / KOI8-R | `Ð¿Ñ€Ð¸Ð²ÐµÑ‚` or random accented vowels | Cyrillic 2-byte UTF-8 sequences mapped to Latin-1 symbols |
| **Greek** | Windows-1253 / ISO-8859-7 | `ÅëëçíéêÜ` | Greek letters mapped to Western European accents |
| **East Asian** (Japanese, Chinese) | Shift-JIS / GB2312 / Big5 | Unreadable Chinese Kanji or syntax errors | Multi-byte East Asian encodings colliding with UTF-8 byte bounds |

Arabic and Hebrew subtitles face a second challenge: bidirectional text shaping. Arabic script is written from right to left (RTL), and individual letters change their physical cursive shape depending on whether they appear at the beginning, middle, or end of a word. 

If a media player decodes the file using standard left-to-right Latin rendering engines without integrated text-shaping libraries like FriBidi and HarfBuzz, the Arabic words appear backward, with every letter detached into isolated blocks.

To understand how subtitle cue structures are organized line by line, see our guide on [what an SRT file is](/maclc/blog/what-is-an-srt-file/).

## How do you convert a garbled subtitle file to UTF-8 in macOS TextEdit?

You do not need to purchase specialized subtitling tools to fix corrupted characters on your Mac. You can re-encode any text subtitle file using the built-in TextEdit application included with macOS.

Follow these steps to convert an SRT file cleanly into UTF-8:

1. Launch **TextEdit** on your Mac.
2. Open **TextEdit › Settings** (or **Preferences** on older macOS releases) from the menu bar (`⌘,`).
3. Click the **Open and Save** tab.
4. Verify that **Opening files** is set to **Automatic** and **Saving files** is set to **Unicode (UTF-8)**.
5. In Finder, right-click your `.srt` file, select **Open With**, and choose **TextEdit**.
6. If the file opens with garbled characters, select **File › Open** (`⌘O`) inside TextEdit, click your subtitle file once, and inspect the **Plain Text Encoding** dropdown menu at the bottom of the open dialog. Select the specific legacy code page that matches the language (such as **Western (Windows Latin 1)** for European languages or **Arabic (Windows)** for Arabic).
7. Once the characters display legibly on screen, select **File › Duplicate** (`⇧⌘S`), then select **File › Save** (`⌘S`).
8. In the save dialog, name the file, verify that **Plain Text Encoding** is set to **Unicode (UTF-8)**, and click **Save**.

Your new subtitle file is now encoded in universal UTF-8 and will open with clean typography on any modern media player.

## How do you convert subtitles to UTF-8 using macOS Terminal (iconv)?

If TextEdit struggles to detect the original code page, or if you need to batch-convert multiple subtitle files across an entire season of a television series, the built-in macOS Terminal utility `iconv` provides a reliable conversion.

`iconv` is a standard Unix command-line library pre-installed on every Mac that converts text streams from one character encoding to another.

### Step 1: Open Terminal

Open Terminal from `/Applications/Utilities/` or search for it using Spotlight (`⌘Space`).

### Step 2: Run the conversion command

Navigate to the directory containing your subtitle file using the `cd` command, or write out the full file paths.

To convert a Western European subtitle file saved in Windows-1252 into clean UTF-8:

```bash
iconv -f WINDOWS-1252 -t UTF-8 "input.srt" > "output_utf8.srt"
```

To convert an Arabic subtitle file saved in Windows-1256 into clean UTF-8:

```bash
iconv -f WINDOWS-1256 -t UTF-8 "arabic_input.srt" > "arabic_utf8.srt"
```

To convert a Cyrillic subtitle file saved in Windows-1251:

```bash
iconv -f WINDOWS-1251 -t UTF-8 "russian_input.srt" > "russian_utf8.srt"
```

The conversion takes less than a second. Once generated, replace the original `.srt` file with the newly created `_utf8.srt` file.

MacLC reads text subtitles in any character encoding, including the old Windows and ISO code pages, and keeps subtitles at SDR white over HDR. If a file still shows strange characters, convert it to UTF-8 as shown above.

## How do you fix subtitle encoding in VLC for Mac?

If you use VLC media player on macOS, you can configure its internal subtitle demuxer to apply a specific fallback encoding when a subtitle file lacks UTF-8 metadata:

1. Open **VLC › Settings** (or **Preferences**) from the menu bar (`⌘,`).
2. Click the **Subtitles / OSD** icon at the top of the preferences window.
3. Locate the **Default encoding** dropdown menu.
4. By default, VLC sets this to **Universal (UTF-8)**. If you are watching a movie with a legacy subtitle, change this dropdown to match your language's legacy code page (for example, **Arabic (Windows-1256)** or **Western European (Windows-1252)**).
5. Click **Save** and restart playback.

Remember to revert this setting back to **Universal (UTF-8)** when you finish the movie, or modern UTF-8 subtitles will begin exhibiting garbled characters in future videos. If your subtitles fail to appear entirely, see our complete guide to [fixing subtitles on Mac](/maclc/blog/subtitles-on-mac/).

## Why are some subtitles impossible to fix with text re-encoding?

If you open a subtitle file and discover unreadable characters that cannot be resolved with UTF-8 conversion, you may not be looking at a text subtitle file at all.

Commercial Blu-ray discs and DVDs do not store subtitles as text. They store subtitles as pre-rendered bitmap images:

- **Blu-ray PGS (`.sup`):** High-definition graphical images.
- **DVD VobSub (`.sub` / `.idx`):** Standard-definition 2-bit run-length encoded images.

If an MKV file contains PGS or VobSub tracks, you cannot edit them in TextEdit or convert them using `iconv`. Attempting to force an image file through a text converter will corrupt the binary graphic headers. To understand how graphic subtitles work, read our explainer on [PGS subtitles explained](/maclc/blog/pgs-subtitles/).

If your subtitle text displays correctly but appears several seconds before or after the dialogue is spoken, your issue is timing rather than encoding. Read our walkthrough on [fixing subtitles out of sync](/maclc/blog/fix-subtitles-out-of-sync/) to correct offsets and frame-rate drift.

## What should you do with your subtitles now?

You should not have to suffer through broken accented vowels, black diamond question marks, or backward Arabic text when watching a movie on your Mac.

To ensure your subtitles always display cleanly:

1. Ensure your subtitle documents are saved with universal UTF-8 encoding.
2. Keep the subtitle file in the same folder as your movie with an identical base name.
3. Download [MacLC from the download page](/maclc/donate/).

MacLC is built specifically for Apple Silicon Macs running macOS 26 Tahoe or later. It handles text subtitles in any character encoding, supports vector typography through libass, and renders clean, legible subtitles across your films.

## Questions people ask

### Why are my subtitles showing weird symbols like Ã© and question marks?

This character corruption is known as mojibake. It occurs when a subtitle file was saved using a legacy single-byte character encoding (like Windows-1252) but your media player attempts to interpret the bytes as modern multi-byte UTF-8.

### How do I fix Arabic subtitles displaying as unreadable symbols on Mac?

Arabic subtitles saved in legacy Windows-1256 must be converted to Unicode (UTF-8). In Terminal, run iconv -f WINDOWS-1256 -t UTF-8 input.srt > output.srt. Additionally, use a media player that bundles FriBidi and HarfBuzz for proper right-to-left letter shaping.

### How do I change a subtitle file to UTF-8 in macOS TextEdit?

Open TextEdit, navigate to Settings › Open and Save, and verify that Plain text file encoding is set to Unicode (UTF-8). Open your subtitle file, select Format › Make Plain Text if necessary, and save the file.

### What is the best character encoding for subtitles?

Unicode UTF-8 is the universal international standard for subtitle files. It supports every language, accent mark, and alphabet on earth within a single document and is supported by every modern operating system.

---
MacLC is a free, open-source video player for Apple Silicon Macs: https://www.hazenstudio.com/maclc/ · download: https://www.hazenstudio.com/maclc/donate/
