簡體   English   中英

不同的jvms與不同的編碼

[英]different jvms with different encodings

假設我有2個jvms在運行 - 1是客戶端而另一個是服務器。 假設客戶端和服務器使用不同的編碼。 如果我在客戶端編寫一個程序,通過網絡將Strings發送到服務器,是否有必要在客戶端將其發送到服務器之前,在服務器的編碼中對客戶端中的String進行編碼? 如果2首先使用不同的編碼,這會毫無意義嗎? 客戶端和服務器如何處理通常在兩者都使用不同編碼的情況下交換消息的情況?

我想你正在遇到所謂的平台默認編碼。 例如,使用新String(byte [])將字節轉換為String時,默認編碼用於將字節轉換為String。 不同的服務器可能具有不同的設置,具有不同的默認平台編碼。

要防止由於不同的默認編碼導致服務器的不同行為,請指定將bytes []轉換為String時要使用的編碼。 如果您不知道要使用的編碼,那么這是另一回事,但至少可以獲得相同字節流的一致結果。

例如,要將String轉換為UTF-8字節流,請使用getBytes(“UTF-8”)並返回String,使用String(byte [],“UTF-8”);

JVM總是在String使用UTF(閱讀本答案 )。

關鍵部分是String的傳輸,這可能發生在基於字節的流上。 String轉換為byte[]實際上需要您指定編碼。 在大多數情況下你應該使用utf-8。

// On the client side
byte[] bytes = myString.getBytes("UTF-8");
serverStream.write(bytes);
// On the server side
byte[] bytes = /* read bytes */;
String myString = new String(bytes, "UTF-8");

我建議使用DataOutputStream / DataInputStream ,它為charset-safe String傳輸提供方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM