我在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
答案 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)
感谢您收听我并给我探索提示!!