Spring boot spring引导命令行运行程序正在使用windows默认字符编码

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中尝试了以下选项,但

我在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::الرياض