Spring boot spring引导命令行运行程序正在使用windows默认字符编码
我在windows上运行spring boot应用程序,并使用windows-1252编码。然而,独立java程序使用UTF-8编码。如何强制spring引导使用UTF-8。下面的代码输出????。我使用jar-jar target\spring-boot-example.jar使用下面的命令 我在powershell程序中验证了默认字符集是windows-1252(System.Text.Encoding)::default 我在application.properties中尝试了以下选项,但未成功:Spring boot spring引导命令行运行程序正在使用windows默认字符编码,spring-boot,utf-8,character-encoding,Spring Boot,Utf 8,Character Encoding,我在windows上运行spring boot应用程序,并使用windows-1252编码。然而,独立java程序使用UTF-8编码。如何强制spring引导使用UTF-8。下面的代码输出????。我使用jar-jar target\spring-boot-example.jar使用下面的命令 我在powershell程序中验证了默认字符集是windows-1252(System.Text.Encoding)::default 我在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
问题似乎是你的标准输出,而不是代码。我建议您创建一个简单的
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::الرياض
另一件您可能想尝试的事情是将其写入文件而不是标准输出
编辑:
我想你找错人了。没有人使用Spring Boot打印到标准输出。您设置的
spring.http.encoding
属性实际上是Boot用来自动配置编码的属性。但所有这些都是为了HTTP请求,而不是为了打印到标准输出。任何应该转到Prod的应用程序都应该使用记录器,而不是使用命令行中的System.out.println
尝试使用-Dfile.encoding=UTF8
运行应用程序
例如:
java-jar-Dfile.encoding=UTF8 target/myapp-0.0.1-SNAPSHOT.jar
@AbjitSarkar@JC Carrillo此问题似乎与windows环境有关。我在UbuntuVM上部署了相同的代码,一切似乎都很好
谢谢你听我说,并给我一些探索的建议 @JC Carrillo public static main打印正确的unicode。java“-Dfile.encoding=UTF8”-jar target\my-app.jar在默认字符集=UTF-8测试下面打印:????不确定是哪个设置导致它以这种方式打印:(下面是maven项目,我在windows 7上运行这个:Main类工作,但是spring boot项目没有,令人费解..拉扯我的头发:)这似乎是windows的问题,在ubuntu上尝试了一切工作。在上运行时,必须弄清楚如何传递正确的编码windows@Ayub没有什么可以通过的。正如我在编辑中所说,打印到标准输出并不是一个真正的用例。你说得对,打印标准输出并不是一个真正的用例,我只是在调试。2我尝试使用debug的jdbc数据源,当我逐步调试调试程序时,我可以看到,在打印之前,当我计算表达式时,unicode是从数据库中正确检索到的。它的印刷品???仅在sys out中。同样,在命令行上ubuntutried上打印不会出现问题,默认字符集:UTF-8已打印,但字符仍打印为???这很有帮助,谢谢!当SpringBoot作为一个可运行的jar运行时,它是在Win-1252中编写的,但是这个选项——日志和生成的文件——现在都在UTF-8中。伟大的我更新了我的答案,这可能是重复的。只要你用UTF-8编码保存源文件,它就可以在Eclipse及其控制台下的Windows上工作。如果您尝试另存为1252,那么Eclipse将警告您它将不起作用。我想在Windows上看到源文件相关部分的十六进制转储。我怀疑它没有作为UTF-8保存在磁盘上。如果磁盘上没有问题,那么可能的原因是Windows控制台无法呈现UTF-8。
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::الرياض