0

だから私は、ユニコードを使用するテキストをファイルに書き込むことになっているプログラムを持っています。Eclipse を使用するとすべてが機能しますが、エクスポートすると機能しません。Eclipse で実行すると、次のようになります。

Все товары: Ted По цене: 100руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп
По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп По価格: 10руб 価格: 10руб

Проданные товары: Ted По цене: 100руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб
Дерп По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп По価格: 10руб 価格: 10руб

重要なこと:

価格: 11 価格: 11 価格: 0 価格: 200руб

そして、これは、ビルドされたjarから実行すると次のようになります。

??? ??????:

????????? ??????:テッド?? ??????: 100??? ???? ?? ??????: 10??? ???? ?? ??????: 10??? ???? ?? ??????: 10??? ???? ?? ??????:
10??? ???? ?? ??????: 10??? ???? ?? ??????: 10??? ???? ?? ??????: 10??? ???? ?? ??????: 10??? ???? ?? ??????: 10??? ???? ?? ??????: 10???

?? ????????? ??????:

??????? ????????????: 11 ???-?? ??????????: 11 ???-?? ?? ??????????: 0 ???????: 200???

これが私のコードです:

public void writeToFile(Purchase purchase, String dir) throws Exception {
        file = new File(dir);

        if (!file.exists()) {
            file.createNewFile();
        }

        printer.println(purchase.getName() + "   По цене:   "
                + purchase.getPrice() + "руб");
        Timer timer = new Timer();
    }

    public void writeFooter(List<Purchase> list) throws Exception {

        int amountSold = 0;
        int amountNotSold = 0;

        int moneyRecieved = 0;

        if (file == null) {
            file = new File(dir);
        }
        if (!file.exists()) {
            file.createNewFile();
        }

        openStreams();

        printer.println("Все товары: ");

        for(int i = 0; i < list.size();i++){
            writeToFile(list.get(i), dir);
        }

        printer.println();
        printer.println("Проданные товары: ");

        for (int i = 0; i <= list.size() - 1; i++) {
            if (list.get(i).isSold()) {
                writeToFile(list.get(i), dir);
                amountSold++;
                moneyRecieved += list.get(i).getPrice();
            }
        }
        printer.println();
        printer.println("Не проданные товары: ");
        for (int i = 0; i <= list.size() - 1; i++) {
            if (!list.get(i).isSold()) {
                writeToFile(list.get(i), dir);
                amountNotSold++;
            }
        }



        printer.println();
        printer.println("Всего пренесенно: " + list.size());
        printer.println("Кол-во проданно: " + amountSold);
        printer.println("Кол-во не проданно: " + amountNotSold);
        printer.println("Выручка: " + moneyRecieved + "руб");

        closeStreams();
}
4

1 に答える 1

1

以下では、エンコーディング「UTF-8」を省略でき、現在のプラットフォーム エンコーディングが使用されますSystem.getProperty("file.encoding")

PrintWriter printer = new Printer(
        new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));

また、エディタのエンコーディングと javac コンパイラのエンコーディングが同じであることにも注意してください。ソースを渡したい場合。IDEでも明示的にUTF-8に設定するかもしれません。

于 2012-12-13T18:59:00.550 に答える