バイトストリームはUnicode文字をサポートしていないことを読みました。
悪い情報源を使用したか、何かを誤解した可能性があります。バイトストリームはバイトをサポートします。したがって、バイトストリームは、バイトで表すことができるすべてのものをサポートします。ビデオ、テキスト、写真、音楽...バイトストリームがそれをサポートしていない場合、それはデジタルコンピュータではまったく使用できません。
単純に1と0のシーケンスであるものでそれらを表す秘訣は、合意されたルールを使用することです。特定のルールに従ってテキストをエンコードすると、受信者は同じルールを使用してテキストをデコードし直すことができます。
"Русский язык"
キリル文字をサポートする任意のエンコーディングでバイトとして表すことができます。ユニコードのエンコーディングのいずれか:UTF-8、UTF-16、UTF-32; Windows-1251、KOI8-R、KOI8-U、ISO-8859-5 ..
これは、これらのエンコーディングが相互に互換性があるという意味ではありません。キリル文字のエンコードに関しては、これらはすべて互換性がないため、1つのエンコードでエンコードされたテキストは、そのエンコードで厳密にデコードする必要があります。
.getBytes()
プラットフォームのデフォルトエンコーディングを使用します。これはたまたまキリル文字をサポートするものでした。UTF-8だと思われるかもしれませんが、Windowsを使用している場合は、Cp1251である可能性がはるかに高くなります。「Unicode文字」を使用したからといって、ファイルが物理的にUTFエンコーディングでエンコードされているという罠にはまらないでください。それはエンコーディングの問題につながります。
したがって、プログラムがどのプラットフォームでも同じように機能し、プログラムが作成したファイルがどのエンコーディングであるかを常に把握できるように、エンコーディングについて常に明示してください。コードを使用すると、次のことが可能になります。
String str = "Русский язык ";
FileOutputStream fos = new FileOutputStream("file path");
fos.write(str.getBytes("UTF-8"));
fos.flush();
fos.close();
または他の答えによって示唆されているように:
String str = "Русский язык ";
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("file path"), "UTF-8"
);
osw.write(str);
osw.flush();
osw.close();
これらは技術的にはまったく同じです。テキストはUTF-8ルールに従ってバイトに変換されています。