Assuming that "foreign" means "not an ASCII character", then you can use
find with a pattern to find all files not having printable ASCII characters in their names:
LC_ALL=C find . -name '*[! -~]*'
(The space is the first printable character listed on http://www.asciitable.com/,
~ is the last.)
The hint for
LC_ALL=C is required (actually,
LC_COLLATE=C), otherwise the character range is interpreted incorrectly. See also the manual page
find to interpret strings as ASCII, it will print multi-byte characters (such as
π) as question marks. To fix this, pipe to some program (e.g.
cat) or redirect to file.
Instead of specifying character ranges,
[:print:] can also be used to select "printable characters". Be sure to set the C locale or you get quite (seemingly) arbitrary behavior.
$ touch $(printf '\u03c0') "$(printf 'x\ty')"
$ ls -F
dir/ foo foo.c xrestop-0.4/ xrestop-0.4.tar.gz π
$ find -name '*[! -~]*' # this is broken (LC_COLLATE=en_US.UTF-8)
... (a lot more)
$ LC_ALL=C find . -name '*[! -~]*'
$ LC_ALL=C find . -name '*[! -~]*' | cat
$ LC_ALL=C find . -name '*[![:print:]]*' | cat