That's true, java uses Unicode internally, so it can combine any script / language. String and char use UTF-16BE, but .class files store string constants in UTF-8 there. In general, it doesn't matter what String does, since there is a conversion to bytes that defines the encoding in which the bytes should be.
If this byte encoding cannot represent some Unicode characters, a placeholder or question mark is indicated. Furthermore, fonts may not have all Unicode characters, 35 MB for a full Unicode font is a normal size. Then you can see a square with 2x2 hex codes or so for missing code points. Or on Linux, another font can replace char.
Consequently, the UTF-8 is a great fine choice.
String s = ...; if (!s.startsWith("\uFEFF")) {
Both UTF-16 (both in byte orders) and UTF-8 are always present in the JRE, while some encodings are not. Therefore, you can use a constant from StandardCharsets that does not require handling any UnsupportedEncodingException.
Above, I added a specification for Windows Notepad esoecially to recognize UTF-8. This is definitely not good. But here is a little help.
There is no shortage of UTF16-LE or UTF-16BE. I think UTF-8 is more universally used, since UTF-16 also cannot store all Unicode code points in 16 bits. The text of Asian scripts will be more concise, but already HTML pages are more compact in UTF-8 due to HTML tags and other Latin scripts.
For Windows, UTF-16LE may be more native.
Placeholder problems may occur for platforms other than Unicode, especially Windows.