Программа работает на Netbeans, но не на CMD

Я сделал программу кодирования в java. Как и ожидалось, он хорошо работает на Netbeans и BlueJ, но когда я запускаю его в командной строке, он работает неправильно.

Это мой код:

import java.io.*;
class encoder
{
    String ff="",ff2="",key="";
    encoder(String ff,String ff2,String key)
    {
        this.ff=ff;
        this.ff2=ff2;
        this.key=key;
        Encode();
    }
    public static void main(String arg[])
    {
        new encoder("C:\\Users\\Arpit Jindal\\Desktop\\arpit.txt","C:\\Users\\Arpit Jindal\\Desktop\\encoded.txt","aaa");
    }
    void Encode()
    {
        try
        {
            File f=new File(ff);
            FileReader fis=new FileReader(f);
            BufferedReader br=new BufferedReader(fis);
            File f2=new File(ff2);
            f2.createNewFile();
            FileWriter fw=new FileWriter(f2);
            BufferedWriter bw=new BufferedWriter(fw);
            int r=0,ln=key.length(),i=0;
            while((r=br.read())!=-1)
            {
                r=r+key.charAt(i)*key.charAt(i)-key.charAt(i);
                r+=5;
                char ch=(char)r;
                i++;
                if(i==(ln-1))
                    i=0;
                bw.write(""+ch);
            }
            bw.close();
            br.close();
        }
        catch(Exception e)
        {}
    }
}

arpit.txt:

fkjbskjbkwgt

encoded.txt (после запуска в Netbeans):

ⓋⓐⓏⓇⓘⓐⓏⓇⓐⓜⓌⓙ

encoded.txt (после запуска на CMD):

????????????

person Arpit Agarwal    schedule 13.12.2015    source источник
comment
Скорее всего, шрифт вашей консоли просто не поддерживает эти символы.   -  person Jon Skeet    schedule 13.12.2015
comment
дааа, может в этом проблема. Как я могу заставить этих персонажей работать с cmd   -  person Arpit Agarwal    schedule 13.12.2015


Ответы (1)


Это происходит из-за кодировки набора символов, вам необходимо установить систему кодирования для вашей JVM. вы можете установить для переменной среды JAVA_TOOL_OPTIONS значение -Dfile.encoding="UTF-8" или любую другую кодировку символов, и она будет подхватывать любые запуски JVM на вашем компьютере с Windows. JVM также напечатает «Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8» на консоли, чтобы указать, что он выбрал JAVA_TOOS_OPTIONS.

или в вашей программе вы можете установить как,

System.setProperty("file.encoding", "UTF-8");

Важные замечания:

1) JVM кэширует значение кодировки символов по умолчанию после запуска JVM, и это относится к конструкторам по умолчанию для InputStreamReader и других основных классов Java. Поэтому вызов System.setProperty("file.encoding", "UTF-8") может не иметь желаемого эффекта.

2) Всегда работайте с собственной кодировкой символов, если можете, это более точный и точный способ преобразования байтов в строки.

person Zia    schedule 13.12.2015
comment
System.setProperty(file.encoding, UTF-8) не работает - person Arpit Agarwal; 13.12.2015
comment
как насчет настройки переменной env? - person Zia; 14.12.2015
comment
Подобраны JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 encode_gui.java:1: ошибка: недопустимый символ: '' ∩╗┐/* ^ encode_gui.java:10: ошибка: класс, интерфейс или перечисление ожидаемого импорта java .авт.*; ^ 2 ошибки - person Arpit Agarwal; 14.12.2015
comment
:-( Не могли бы вы использовать приведенную ниже команду javac -encoding UTF8 encoder.java - person Zia; 15.12.2015
comment
это не имело значения - person Arpit Agarwal; 20.12.2015