Being able to configure your system to type the characters really doesn't solve the problem. In particular, if you get data (including metadata such as filenames) from someone else, you need to recognize the characters, both to do the configuration and then actually type them. And characters are not glyphs. There are all kinds of cases where simply looking at something doesn't and can't tell you what characters are in it.
There is a portable unicode¹ tool available, and it is packaged in a bunch of distributions. I'll spare us the full output, but "unicode a→z" produces something like:
U+0061 LATIN SMALL LETTER A
UTF-8: 61 UTF-16BE: 0061 Decimal: a Octal: \0141
a (A)
Uppercase: 0041
Category: Ll (Letter, Lowercase); East Asian width: Na (narrow)
Unicode block: 0000..007F; Basic Latin
Bidi: L (Left-to-Right)
Age: Assigned as of Unicode 1.1.0 (June, 1993)
…
U+2192 RIGHTWARDS ARROW
…
U+007A LATIN SMALL LETTER Z
Emacs has a built-in M-x describe-char that prints out similar information and also this useful tip:
to input: type "C-x 8 RET 2192" or "C-x 8 RET RIGHTWARDS ARROW"
However in the case of trying to type the name of a file in a shell, that has some weird unicode character in it, just copying the character is faster than to first identify it and then use some clever trick to type it. It can be useful to know for some small number of weird symbols how to insert them, or to use C-x 8 RET (followed by TAB-completion) to find symbols, but I almost always stick to what is available on my keyboard, and often only a small ASCII subset of that, to keep things simple.