Java 导出时不使用Unicode写入

Java 导出时不使用Unicode写入,java,file,unicode,printwriter,Java,File,Unicode,Printwriter,所以我有一个程序,应该是写文本,使用unicode,到一个文件。当我通过Eclipse进行操作时,一切都可以正常工作,但在导出时就不行了。下面是我通过Eclipse执行此操作时的外观: Саааааааааа:TedПаааа:100ббааПа ццбббббПббббПббббббб По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп ПцццццПцц:10цццПц:10ццц ПСаааааааа

所以我有一个程序,应该是写文本,使用unicode,到一个文件。当我通过Eclipse进行操作时,一切都可以正常工作,但在导出时就不行了。下面是我通过Eclipse执行此操作时的外观:

Саааааааааа:TedПаааа:100ббааПа ццбббббПббббПббббббб По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп ПцццццПцц:10цццПц:10ццц

ПСааааааааа:TedПааа:100ПбааааПа ПСПццбПцц:10цбббПц:10ббббб 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10руб Дерп По цене: 10бб

ааааааа

аСааааааа:11аааааааааа:0 ача:200бб

这就是我在一个内置的罐子里做这件事时的样子:

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

Ted??: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();
}
public void writeToFile(Purchase,String dir)引发异常{
文件=新文件(目录);
如果(!file.exists()){
createNewFile();
}
printer.println(purchase.getName()+“Пццц”:
+purchase.getPrice()+“crmk_б”);
定时器=新定时器();
}
public void writeFooter(列表)引发异常{
int amountsell=0;
int amountnotsell=0;
int MoneyReceived=0;
if(file==null){
文件=新文件(目录);
}
如果(!file.exists()){
createNewFile();
}
openStreams();
打印机。打印机名称(“Саааф”);
对于(int i=0;i对于(int i=0;i在下面的代码中,可以省略编码“UTF-8”,然后使用当前的平台编码:
System.getProperty(“file.encoding”)


还请注意,编辑器编码和javac编译器编码是相同的;如果您想传递源代码,也可以在IDE中将它们显式设置为UTF-8。

在创建打印机时设置字符集无论何时进行任何类型的输入/输出,都需要指定字符集,否则它将自动决定对你来说。当使用超越ASCII字符时,自动/默认值将不可避免地导致高概率的问题。另外,请参阅他使用的工具,确保他不会犯与你相同的错误。
PrintWriter printer = new Printer(
        new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));