[{"data":1,"prerenderedAt":143},["ShallowReactive",2],{"project-\u002Fprojects\u002Fsub2utf":3,"related-sub2utf":114,"news-sub2utf":115,"more-sub2utf":116},{"id":4,"title":5,"body":6,"coverLabel":96,"description":97,"detailImage":96,"extension":98,"featured":99,"github":100,"image":101,"imageFit":96,"links":96,"meta":102,"navigation":99,"order":103,"path":104,"platforms":105,"seo":106,"stem":107,"tags":108,"tech":109,"url":112,"__hash__":113},"projects\u002Fprojects\u002Fsub2utf.md","sub2utf",{"type":7,"value":8,"toc":88},"minimark",[9,14,23,27,59,63,78,82],[10,11,13],"h2",{"id":12},"overview","Overview",[15,16,17,18,22],"p",{},"Subtitles for Serbian, Croatian, Polish and other Central and Eastern European languages often come in legacy encodings like Windows-1250 or ISO-8859-2. Plex expects UTF-8, so the special characters come out garbled. Drop an ",[19,20,21],"code",{},".srt"," file into sub2utf and you get a clean UTF-8 copy back.",[10,24,26],{"id":25},"what-it-does","What it does",[28,29,30,38,47,53],"ul",{},[31,32,33,37],"li",{},[34,35,36],"strong",{},"Detects the encoding automatically",", with a manual override when detection isn't confident",[31,39,40,43,44],{},[34,41,42],{},"Names files the way Plex expects",": converted files are saved as ",[19,45,46],{},"name.utf8.{lang}.srt",[31,48,49,52],{},[34,50,51],{},"Keeps files private",": detection and conversion run in your browser or on your computer, and nothing is uploaded",[31,54,55,58],{},[34,56,57],{},"Runs on the web and the desktop",": use it at sub2utf.org, or download the macOS, Windows or Linux app, which saves straight to disk without a dialog",[10,60,62],{"id":61},"how-it-works","How it works",[15,64,65,66,69,70,73,74,77],{},"Detection uses ",[19,67,68],{},"chardetng",", the encoding detector from Firefox, written in Rust. The same Rust code is compiled to WebAssembly for the browser and runs natively in the desktop app. Conversion uses ",[19,71,72],{},"TextDecoder"," on the web and ",[19,75,76],{},"encoding_rs"," on desktop. One Svelte UI sits on top of both, with a small adapter for each platform.",[10,79,81],{"id":80},"built-with","Built with",[15,83,84,85,87],{},"Svelte 5, Tailwind v4, Tauri v2 and Rust, with ",[19,86,68],{}," compiled to WebAssembly.",{"title":89,"searchDepth":90,"depth":90,"links":91},"",2,[92,93,94,95],{"id":12,"depth":90,"text":13},{"id":25,"depth":90,"text":26},{"id":61,"depth":90,"text":62},{"id":80,"depth":90,"text":81},null,"Converts subtitle files (.srt) from legacy encodings to UTF-8 so Plex shows č, ć, š, đ and ž correctly.","md",true,"https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fsub2utf","\u002Fimg\u002Fproducts\u002Fsub2utf.webp",{},4,"\u002Fprojects\u002Fsub2utf","Web · macOS · Windows · Linux",{"title":5,"description":97},"projects\u002Fsub2utf",[],[110,111],"svelte","tauri","https:\u002F\u002Fsub2utf.org","D-P2QviLs-7ePpRk_x3gvJFzI14YZMuX0Sqbb7K4t-o",[],[],[117,122,128,133,134,138],{"path":118,"title":119,"description":120,"image":121,"imageFit":96,"coverLabel":96},"\u002Fprojects\u002Fcamera-video-converter","Camera Video Converter","Free, offline Android app that turns hard-to-share camera footage into standard 1080p MP4s, right on the phone.","\u002Fimg\u002Fproducts\u002Fcamera-video-converter.webp",{"path":123,"title":124,"description":125,"image":126,"imageFit":127,"coverLabel":89},"\u002Fprojects\u002Fopen-claude-agent-sdk","open-claude-agent-sdk","Drop-in, open-source replacement for @anthropic-ai\u002Fclaude-agent-sdk. Readable TypeScript that runs on the Claude CLI you already have installed.","\u002Fimg\u002Fproducts\u002Fopen-claude-agent-sdk-home.webp","contain",{"path":129,"title":130,"description":131,"image":132,"imageFit":96,"coverLabel":96},"\u002Fprojects\u002Fyoutube-shorts-blocker","YouTube Shorts Blocker","A lightweight Chrome extension that hides YouTube Shorts everywhere and can redirect Shorts links.","\u002Fimg\u002Fproducts\u002Fyoutube-shorts-blocker.webp",{"path":104,"title":5,"description":97,"image":101,"imageFit":96,"coverLabel":96},{"path":135,"title":136,"description":137,"image":96,"imageFit":96,"coverLabel":96},"\u002Fprojects\u002Fdocument-iteration-skill","document-iteration-skill","A lightweight markdown syntax for editing documents with Claude: leave feedback inline instead of asking it to regenerate the whole document.",{"path":139,"title":140,"description":141,"image":142,"imageFit":96,"coverLabel":96},"\u002Fprojects\u002Flitrpgvault","LitRPG Vault","A database of LitRPG and Progression Fantasy books: 250+ series with ratings, reading orders and audiobook links.","\u002Fimg\u002Fproducts\u002Flitrpgvault.webp",1790076223311]