Setting the default Java character encoding

后端 未结 17 1725
终归单人心
终归单人心 2020-11-21 06:09

How do I properly set the default character encoding used by the JVM (1.5.x) programmatically?

I have read that -Dfile.encoding=whatever used to be the

相关标签:
17条回答
  • 2020-11-21 06:50

    Following @Caspar comment on accepted answer, the preferred way to fix this according to Sun is :

    "change the locale of the underlying platform before starting your Java program."

    http://bugs.java.com/view_bug.do?bug_id=4163515

    For docker see:

    http://jaredmarkell.com/docker-and-locales/

    0 讨论(0)
  • 2020-11-21 06:51
    mvn clean install -Dfile.encoding=UTF-8 -Dmaven.repo.local=/path-to-m2
    

    command worked with exec-maven-plugin to resolve following error while configuring a jenkins task.

    Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0
    Error occurred during initialization of VM
    java.nio.charset.IllegalCharsetNameException: "UTF-8"
        at java.nio.charset.Charset.checkName(Charset.java:315)
        at java.nio.charset.Charset.lookup2(Charset.java:484)
        at java.nio.charset.Charset.lookup(Charset.java:464)
        at java.nio.charset.Charset.defaultCharset(Charset.java:609)
        at sun.nio.cs.StreamEncoder.forOutputStreamWriter(StreamEncoder.java:56)
        at java.io.OutputStreamWriter.<init>(OutputStreamWriter.java:111)
        at java.io.PrintStream.<init>(PrintStream.java:104)
        at java.io.PrintStream.<init>(PrintStream.java:151)
        at java.lang.System.newPrintStream(System.java:1148)
        at java.lang.System.initializeSystemClass(System.java:1192)
    
    0 讨论(0)
  • 2020-11-21 06:54

    Recently I bumped into a local company's Notes 6.5 system and found out the webmail would show unidentifiable characters on a non-Zhongwen localed Windows installation. Have dug for several weeks online, figured it out just few minutes ago:

    In Java properties, add the following string to Runtime Parameters

    -Dfile.encoding=MS950 -Duser.language=zh -Duser.country=TW -Dsun.jnu.encoding=MS950
    

    UTF-8 setting would not work in this case.

    0 讨论(0)
  • 2020-11-21 06:55

    In case you are using Spring Boot and want to pass the argument file.encoding in JVM you have to run it like that:

    mvn spring-boot:run -Drun.jvmArguments="-Dfile.encoding=UTF-8"
    

    this was needed for us since we were using JTwig templates and the operating system had ANSI_X3.4-1968 that we found out through System.out.println(System.getProperty("file.encoding"));

    Hope this helps someone!

    0 讨论(0)
  • 2020-11-21 06:57

    Unfortunately, the file.encoding property has to be specified as the JVM starts up; by the time your main method is entered, the character encoding used by String.getBytes() and the default constructors of InputStreamReader and OutputStreamWriter has been permanently cached.

    As Edward Grech points out, in a special case like this, the environment variable JAVA_TOOL_OPTIONS can be used to specify this property, but it's normally done like this:

    java -Dfile.encoding=UTF-8 … com.x.Main
    

    Charset.defaultCharset() will reflect changes to the file.encoding property, but most of the code in the core Java libraries that need to determine the default character encoding do not use this mechanism.

    When you are encoding or decoding, you can query the file.encoding property or Charset.defaultCharset() to find the current default encoding, and use the appropriate method or constructor overload to specify it.

    0 讨论(0)
  • 2020-11-21 06:57

    Try this :

        new OutputStreamWriter( new FileOutputStream("Your_file_fullpath" ),Charset.forName("UTF8"))
    
    0 讨论(0)
提交回复
热议问题