首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java String.getBytes() 編碼陷阱:中文字符字節長度差異與截取亂碼根因

     編輯:程式設計疑難解答

現象

byte[] d = "你我他".getBytes(); // 長度 9 (UTF-8: 3字節/漢字)
String s = new String(d, 0, 2); // 只取前 2 字節 → 亂碼 

根因

  • 平台默認編碼不一致:Windows 默認 GBK (2字節/漢字),Linux/Mac 默認 UTF-8 (3字節/漢字)。
  • 按字節截取破壞多字節字符:UTF-8 中漢字佔 3 字節,截取前 2 字節導致解碼失敗。

最佳實踐

  1. 顯式指定編碼:
    byte[] utf8 = "你我他".getBytes(StandardCharsets.UTF_8);
    byte[] gbk = "你我他".getBytes("GBK");
  2. 按字符索引截取:
    String firstTwo = "你我他".substring(0, 2); // "你我"
    byte[] bytes = firstTwo.getBytes(StandardCharsets.UTF_8);
  3. 網絡傳輸/存儲統一用 UTF-8,避免跨平台亂碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved