Downloaded media Hebrew subtitles issue

  • Your device (make and model): Oneplus 7
  • The device OS (and OS version): Android 12
  • Plex app version: 2025.15.0 - 966828394
  • What you were doing when the issue happened - watching a movie downloaded - medium quality
  • Whether it’s reproducible - Movies with SRT subtitles in Hebrew
  • Bonus: Attach logs to the forum post (support article here)

The movie in question works well when playing through the movie library interface AKA not the downloaded file.
When switching to the download interface and running the file there, it is with diamonds, so the file didn’t convert well.
On top of that, on the download interface there is no option to upload/find a new subtitle file if required.
What is weird, is that 2 different movies with the same subtitles windows-1255 encoding, one is working and one is not.

Tried to download a different movie with original quality as to not go through the transcode:
doesn’t work, still messed up.



2490692881476642_2.zip (197.2 KB)
Password for the file will be provided to support personnel as it contain sensitive information on the server, please reach out
RRR.2022.1080p.WEB.h264-KOGi.srt (90.4 KB)
Emily.the.Criminal.2022.1080p.BluRay.DD+5.1.x264-playHD.srt (63.8 KB)

1 Like

There is a problem with subtitles right now in the new app. Something to do with special characters. Test with the browser, and it will show those subtitles fine.

So far, I have not seen anyone from Plex say there is an ETA on the fix, but multiple people have confirmed that the issue only exists with the new app.

It would be great if you could provide both of these subs.

uploaded subtitles

What happens if you use this version?
RRR.2022.1080p.WEB.h264-KOGi.srt.zip (33.7 KB)

1 Like

The subtitle works, it is not RTL aligned but it is not diamonds anymore
Ive noticed it is UTF BOM encoded

1 Like

Precisely. Convert your subtitle files. I’ve missed the alignment as I am not attuned to notice that kind of thing.
Using a Windows code page with a client device or a server that is not running windows doesn’t sound like a good match.
And the era of 8bit regional code pages is definitely going to be over quite soon, as newer devices will going to get less and less support for them.
Because there has been a superior alternative for over 20 years now.

It is documented that Plex pretty much requires utf-8 to be used in subtitles.
https://support.plex.tv/articles/200471133-adding-local-subtitles-to-your-media/

After working tirelessly with chatgpt we created the following powershell script to convert all non utf subtitles to utf.

What the script does:

  • Detects and skips files already in UTF-8, with or without BOM
  • Only processes files not in UTF-8 and containing Hebrew text
  • Logs everything and shows progress
  • Recursively finds all .srt files
  • Saves a UTF-8 encoded copy with he.utf.srt suffix as to not to mess the original file (Bonus - it now being recognized in plex as hebrew and not Unknown)
    convert_hebrew_srt_detect_encoding.zip (1.2 KB)

Hope it will help someone

1 Like

Posting it as code, instead of an attachment has better chances to survive the next forum purge:


function Get-EncodingType {
    param ([string]$filePath)

    $bytes = [System.IO.File]::ReadAllBytes($filePath)

    if ($bytes.Length -ge 3 -and $bytes[0] -eq 0xEF -and $bytes[1] -eq 0xBB -and $bytes[2] -eq 0xBF) {
        return "utf8-bom"
    }

    try {
        $utf8NoBom = New-Object System.Text.UTF8Encoding($false)
        $text = $utf8NoBom.GetString($bytes)
        $reEncoded = $utf8NoBom.GetBytes($text)

        if ($reEncoded.Length -eq $bytes.Length -and ($reEncoded -join ',') -eq ($bytes -join ',')) {
            return "utf8"
        } else {
            return "other"
        }
    } catch {
        return "other"
    }
}

$scriptPath = $MyInvocation.MyCommand.Path
$rootPath = Split-Path -Path $scriptPath -Parent
$logFile = Join-Path -Path $rootPath -ChildPath "conversion_log.txt"
$sourceEncoding = [System.Text.Encoding]::GetEncoding(1255)
$targetEncoding = New-Object System.Text.UTF8Encoding($false)  # UTF-8 without BOM

# Clear old log and create a new one
if (Test-Path $logFile) { Remove-Item $logFile }
"Conversion started on $(Get-Date)" | Out-File -FilePath $logFile

# Get all .srt files except already processed ones
$files = Get-ChildItem -Path $rootPath -Recurse -Filter *.srt | Where-Object {
    $_.Name -notmatch '\.he\.utf\.srt$'
}

if ($files.Count -eq 0) {
    "No new .srt files found in $rootPath or its subfolders." | Add-Content -Path $logFile
    Write-Host "No files found. Log saved to $logFile"
    return
}

$total = $files.Count
$counter = 0

foreach ($file in $files) {
    $counter++
    $inputFile = $file.FullName

    $encoding = Get-EncodingType $inputFile
    if ($encoding -eq "utf8" -or $encoding -eq "utf8-bom") {
        Add-Content -Path $logFile -Value "[$counter/$total] Skipped (already UTF-8): $inputFile"
        continue
    }

    try {
        $content = [System.IO.File]::ReadAllText($inputFile, $sourceEncoding)

        if ($content -match '[\u0590-\u05FF]') {
            $newName = $file.BaseName
            $outputFile = Join-Path -Path $file.DirectoryName -ChildPath "$newName.he.utf.srt"

            [System.IO.File]::WriteAllText($outputFile, $content, $targetEncoding)
            Add-Content -Path $logFile -Value "[$counter/$total] Converted: $outputFile"
        } else {
            Add-Content -Path $logFile -Value "[$counter/$total] Skipped (no Hebrew): $inputFile"
        }
    } catch {
        Add-Content -Path $logFile -Value "[$counter/$total] ERROR in file: $inputFile - $_"
    }

    Write-Progress -Activity "Converting SRT files" -Status "$counter of $total" -PercentComplete (($counter / $total) * 100)
}

Write-Host "Done. Log saved to $logFile"

Another problem arise
If I have 2 srt files, one with utf and one without, which if them plex transcode for the download version?
or does he use all available substitles in a folder?

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.