キリル文字のテキストSystem.out.println( "Русскийязык")を書くと、この╨єёёъшщч√ъを上回り、Windowsコンソールを使用して、これをどのように修正できますか?、ファイルエンコーディングはutf-8ですが、それがansiiまたはwindows-1251だったとき、それは同じものを出力していました。
3 に答える
import java.io.PrintStream;
class Kyrill {
public static void main(String args[])
throws java.io.UnsupportedEncodingException
{
String ru = "Русский язык";
PrintStream ps = new PrintStream(System.out, true, "UTF-8");
System.out.println(ru.length());
System.out.println(ru);
ps.println(ru);
}
}
D:\Temp :: chcp 65001
Aktive Codepage: 65001.
D:\Temp :: javac -encoding utf-8 Kyrill.java && java Kyrill
12
??????? ????
Русский языкй язык
出力に末尾のジャンクが表示される場合がありますが(私はそうです)、出力をファイルにリダイレクトすると、これは単なる表示アーティファクトであることがわかります。
したがって、 PrintStreamを使用して機能させることができます。System.outはプラットフォームエンコーディング(私にとってはcp1252)を使用しており、キリル文字は含まれていません。
エンコーディングビジネスを理解するための追加の注意事項:
D:\Temp :: chcp 1251
Aktive Codepage: 1251.
:: This is another codepage (8 bits only) that maps bytes to cyrillic characters.
:: Edit the source file to have:
:: PrintStream ps = new PrintStream(System.out, true, "Windows-1251");
:: We intend to match the console output; else we won't get the expected result.
D:\Temp :: javac -encoding utf-8 Kyrill.java && java Kyrill
12
??????? ????
Русский язык
したがって、一部の人々が信じていることに反して、Windowsコンソールはギリシャ語とロシア語を印刷できるというカジュアルな意味でUnicodeを使用していることがわかります。
chcp 65001でWindowsコンソールをUTF-8に切り替えることはできますが、それでもUTF-8出力を正しく表示できない場合があります。これはあなたが望むものではないかもしれませんが、少なくともそれは選択です:あなたの標準出力をファイルにリダイレクトします。ソースファイルをUTF-8として保存し、UTF-8エンコーディングを使用してコンパイルします。リダイレクトされた出力ファイルは、UTF-8対応のテキストエディターで表示できます。
String s = "Русский язык";
System.setOut(new PrintStream(new FileOutputStream("out.txt"), true, "UTF-8"));
System.out.println(s);
Windowsコンソールは、歴史的な理由から、キリル文字のエンコーディングCP866を使用しています(DOSを覚えていますか?)。Windowsコンソールは間違いなくUnicode対応ではありません。
(残念ながら、テスト済みのコードスニペットを提供するためのWindowsマシンはありません。)