2017-07-10 18 views
1

我在Windows上運行彈簧啓動應用程序及其使用Windows-1252編碼。然而,獨立的java程序正在使用UTF-8編碼。我如何強制spring引導使用UTF-8。下面的代碼輸出????。我用下面的命令,使用廣口瓶的罐子目標\彈簧引導example.jar春季啓動命令行亞軍正在使用Windows默認字符編碼

我覈實,在電源外殼程序默認字符集爲Windows-1252(System.Text.Encoding)::默認

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

[彈簧啓動應用程序顯示的可能的重複?字符而不是unicode](https://stackoverflow.com/questions/44992808/spring-boot-application-showing-characters-instead-of-unicode) –

+0

我已經更新了我的答案。 –

+0

只要您使用UTF-8編碼保存源文件,它就可以在Eclipse及其控制檯上的Windows上使用。如果你試圖保存爲1252,那麼Eclipse會警告你它不會工作。我希望在Windows上看到源文件相關部分的十六進制轉儲。我懷疑它不是以UTF-8格式保存在磁盤上的。如果在磁盤上可以,那麼可能的原因是您的Windows控制檯無法呈現UTF-8。 –

回答

0

@AbjitSarkar @JC卡里這個問題似乎與Windows環境。我在UbuntuVM上部署了相同的代碼,看起來一切正常。

謝謝你傾聽我的聲音,並給我提示探索!

1

這個問題似乎是你的標準輸出,而不是代碼。我建議你創建一個簡單的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屬性實際上是HttpEncodingProperties,Boot使用它來使用HttpEncodingAutoConfiguration自動配置編碼。但所有這些都是爲了HTTP請求,而不是打印到標準輸出。任何值得前往Prod的應用程序都應使用記錄器,而不是System.out.println

+0

@JC Carrillo public static main打印正確的unicode。 的java 「-Dfile.encoding = UTF8」 -jar目標\ MY-app.jar下面 默認字符集= UTF8 測試打印:???? 不知道哪個設置導致它打印這種方式:( 下面是maven項目,我在Windows 7上運行這個: https://github.com/AyubOpen/spring-boot-jdbc.git – Ayub

+0

主類作品,但是,春季啓動項目不,令人費解。拉我的頭髮:) – Ayub

+0

這似乎是一個Windows的問題,嘗試在Ubuntu的一切工作。必須弄清楚如何在Windows上運行時傳遞正確的編碼方式 – Ayub

0

嘗試在命令行中使用-Dfile.encoding=UTF8運行您的應用程序。

例子:

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

+0

,默認字符集:UTF-8被打印,但字符仍然打印爲??? – Ayub