1. 程式人生 > >百度語音轉文字亂碼 Charset.defaultcharset()

百度語音轉文字亂碼 Charset.defaultcharset()

系統環境:Windows7 Tomcat7 JDK1.7

在使用百度語音API時,發現一個問題,通過web發起請求將語音轉換為文字時,總是亂碼;而在測試單元時,轉換成功,不會出現亂碼。然後用下面語句輸出系統編碼

        Properties initProp = new Properties(System.getProperties());
        System.out.println(Charset.defaultCharset());
        System.out.println("當前系統編碼:" + initProp.getProperty("file.encoding"));
        System.out.println("當前系統語言:" + initProp.getProperty("user.language"));

web訪問輸出:

GBK
GBK
zh

測試單元輸出:

UTF-8
UTF-8
zh

百度使用的是UTF-8,遂將系統字符集編碼改為UTF-8,

System.getProperties().put("file.encoding", "UTF-8");

再次進行web測試,輸出:

GBK
UTF-8
zh

當然,轉換結果還是亂碼

為什麼Charset.defaultCharset()輸出的編碼,這個編碼到底是什麼編碼?

查詢結果:

原來 Charset.defaultcharset()指的是jvm輸入流、輸出流預設使用的編碼/解碼方式。是虛擬機器的預設 charset。所以 我們只需要改變虛擬機器的編碼為UTF-8即可。

修改方法:

1).JDK修改

修改catalina.bat

新增:

set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% -Dfile.encoding=UTF-8"

 

2).配置系統環境變數

name: JAVA_TOOL_OPTIONS

value: -Dfile.encoding=UTF-8

 重啟IDE,再次執行,字符集編碼為UTF-8,轉換成功