我已經創建了一個Java程序(REST)服務。整個開發/測試是在Windows上完成的,現在部署到生產測試正在進行。然而,有「小」編碼的問題出現了:Java字符串編碼 - 與Windows不同的Linux
String s3 = new String("grün".getBytes(), "UTF-8");
logger.info(s3);
logger.info("das ist wirklich grün");
logger.info(new String("das ist wirklich grün".getBytes("UTF-8"), "UTF-8"));
我通過HTTP屬性(Web應用程序託管在tomcat的,具有權威性的插件Apache的背後)我必須處理幾個值接收。它們的編碼方式與您在第1行中看到的一樣。(此值顯示在Windows和Linux上)。
當我把它轉換爲UTF-8就像在第1行並寫入日誌文件(log4j)我的Windows機器上有「grün」(這是正確的)。在Linux服務器上,我仍然有相同的輸出。
然後我試着直接使用Umlaute(üäöetc),就像第2行一樣,並且在Windows和Linux上這兩個值都被正確寫入日誌文件。然後,我嘗試像第3行那樣進行一些轉換,但結果相同:兩個操作系統都顯示相同的結果。
兩臺機器都具有相同的Java語言環境(Locale.getDefault()) - >我已經試過了。我無法改變將值插入到HTTP請求中的方式!
是的,謝謝你,這暗示是在正確的方向。 Windows機器使用Windows-1252,而Linux使用UTF-8。 – karlis
使用String s3 = new String(「grün」.getBytes(「windows-1252」),「UTF-8」);訣竅,現在它在Linux機器上也是正確的。然而,我並不是爲什麼我必須在Linux上使用windows charset,也許這個字符串最初是在Windows機器上創建的...... – karlis
*「...也許該字符串最初是在Windows機器上創建的。」*可能是! –