読み込まれたバイトストリームのファイル符号化を取得して文字化けします

1499 ワード


1.pom.xml  :



  com.googlecode.juniversalchardet
  juniversalchardet
  1.0.3

 
2.  ツールクラス
  class GetByteEncode {
    String getEncoding(byte[] bytes) {
      String deafultCode = "UTF-8";
      UniversalDetector detector = new UniversalDetector(null);
      detector.handleData(bytes, 0, bytes.length);
      detector.dataEnd();
      String encoding = detector.getDetectedCharset();
      detector.reset();
      if (encoding == null) {
        encoding = deafultCode;
      }
      return encoding;
    }
  }

3.使用:
 String filenameIso = new String(data.getFileName().getBytes("UTF-8"), "iso-8859-1");
        /*       */
        response.addHeader("Content-Disposition", "fileName=\"" + filenameIso + "\"");
        os = response.getOutputStream();
        byte[] b = fileInfo.getData().getFileByte();
        String encoding = new GetByteEncode().getEncoding(b); //     --  
        response.setHeader("Content-type", "text/html;charset=" + encoding);
        String a = new String(fileInfo.getData().getFileByte(), encoding);
        os.write(a.getBytes(encoding));