First, use a font that has characters for all languages (actually scripts) you want to use, like Arial. Otherwise, characters that the font doesn't have will appear as squares.
Now, you need to get the encoding right, or you'll get incorrect/garbage characters like you mention. You have 3 options:
1. Video with subtitles encoded in the video itself
That's the easiest, If you can get it...
2. Subtitles in Language-Specific Charset, Like Windows-1255 (Hebrew) or Windows-1251 (Russian)
- Use subtitles that are encoded in the language-specific charset - most are nowadays.
- Tell your player/DirectShow filter which charset the subtitles are encoded in. In [VLC], set it in Tools -> Preferences... -> Subtitles & OSD -> Default encoding. You will have have to set it every time - not fun.
- If your player/DirectShow filter doesn't have that option, you will have to tell it via the system's non-english support language, and reboot. Even less fun.
3. Subtitles in [UTF-8] - the way of the future
- Use a player/DirectShow filter which is able to show UTF-8 subtitles, like example VLC or [DirectVobSub].
- Use subtitles that are encoded in UTF-8.
Unfortunately, most available subtitles nowadays are not encoded in UTF-8. You can convert them:
a. If your subtitles are external, use software like [iconv] ([Windows version]) or [SubtitleEdit]. Make sure you use correct source encoding (Windows-1255 for Hebrew and Windows-1251 for Russian) and target encoding (UTF-8).
b. If your subtitles are internal to your video file, you'll need to extract them first. For MKV files, use [mkvtoolnix] to extract subtitles, convert them like in "a" above and pack them back into MKV. For other video file containers, use their appropriate tools.