โปรแกรมที่ทำงานบน Netbeans แต่ไม่ใช่บน CMD

ฉันได้ทำโปรแกรมเข้ารหัสในจาวา มันทำงานได้ดีบน Netbeans และ BlueJ ตามที่คาดไว้ แต่เมื่อฉันรันบน command prompt มันทำงานไม่ถูกต้อง

นี่คือรหัสของฉัน:

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: ข้อผิดพลาด: คลาส อินเทอร์เฟซ หรือ enum ที่คาดหวังการนำเข้า java .awt.*; ^ 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