spring boot命令行运行器正在使用windows默认字符编码

时间:2017-07-10 22:06:51

标签: spring-boot utf-8 character-encoding

我在Windows上运行spring boot应用程序,并使用windows-1252编码。但是,独立的java程序正在使用UTF-8编码。如何强制弹簧启动使用UTF-8。下面的代码输出????。我使用jar -jar target \ spring-boot-example.jar

使用下面的命令

我在power shell程序中验证了默认字符集是windows-1252(System.Text.Encoding):: Default

public class SpringBootConsoleApplication implements CommandLineRunner {
public static void main(String[] args) throws Exception {
    SpringApplication.run(SpringBootConsoleApplication.class, args);
}

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Default Charset=" +   Charset.defaultCharset());
        System.out.println("test::" +"الرياض");        
    }
}

我在application.properties中尝试了以下选项但没有成功:

# Charset of HTTP requests and responses. Added to the "Content-Type"    header if not set explicitly.
 spring.http.encoding.charset=UTF-8
 # Enable http encoding support.
 spring.http.encoding.enabled=true
 # Force the encoding to the configured charset on HTTP requests and   responses.
 spring.http.encoding.force=true

3 个答案:

答案 0 :(得分:1)

问题似乎是你的stdout,而不是代码。我建议你创建一个简单的main类,没有Spring Boot,或任何外部依赖,并打印UTF-8字符。我在Mac上,以下代码打印为我找到:

public class Main {

    public static void main(String[] args) {
        System.out.println("Default Charset=" + Charset.defaultCharset());
        System.out.println("test::" + "الرياض");
    }
}

Default Charset=UTF-8
test::الرياض

您可能想要尝试的另一件事是将其写入文件而不是stdout。

修改

我认为你正在吠叫错误的树。没有人使用Spring Boot打印到stdout。您设置的spring.http.encoding属性实际上是HttpEncodingProperties,Boot使用HttpEncodingAutoConfiguration来自动配置编码。但是所有这些都是HTTP请求,而不是打印到stdout。任何值得去Prod的应用都应该使用记录器,而不是System.out.println

答案 1 :(得分:0)

尝试在命令行中使用-Dfile.encoding=UTF8运行您的应用。

示例:

java -jar -Dfile.encoding=UTF8 target/myapp-0.0.1-SNAPSHOT.jar

答案 2 :(得分:-1)

@AbjitSarkar @JC Carrillo这个问题似乎与windows环境有关。我在UbuntuVM上部署了相同的代码,一切似乎都很好。

感谢您收听我并给我探索提示!!