导出时不写入Unicode

时间:2012-12-13 17:55:41

标签: java file unicode printwriter

所以我有一个程序,它应该将文本(使用unicode)写入文件。当我通过Eclipse执行此操作时,Everythhing工作,但在exxported时则不行。这是我通过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();
}

1 个答案:

答案 0 :(得分:1)

在下文中,可以省略编码“UTF-8”,然后使用当前平台编码:System.getProperty("file.encoding")

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

还要注意编辑器编码和javac编译器编码是一样的;如果你想传递消息来源。也许在IDE中明确地将它们设置为UTF-8。