2012-08-02 4 views
1

내 웹 사이트를 통해 내 웹 사이트에서 원격 서버에 파일을 업로드 할 수 있습니다. 서버에 파일 이름에 문제를 방지하기 위해, 내가 서버에 업로드 된 파일의 이름을 간단한 규칙을 적용 할 : 자신의 악센트가없는 동등한에 의해Java에서 String을 정규화 할 때 인위적 인코딩.

  1. 모든 악센트 문자를 교체하십시오 (A, E, è 등) (즉, 우리의 예에서 A, E, E)
  2. 은 밑줄
  3. 모든 특수 문자를 대체는

    protected String serverFilename(String localFilename) { 
        if (localFilename == null || localFilename.length() == 0) { 
         throw new IllegalArgumentException("Invalid filename for upload (localFilename=" + localFilename + ")"); 
        } 
    
        String result = Normalizer.normalize(localFilename, Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "").replaceAll("[^a-zA-Z0-9.]", "_").toLowerCase(); 
        LOG.debug("filename " + localFilename + " returns: " + result); 
        return result; 
    } 
    
    처럼

내 코드가 보이는 전체를 소문자

assertEquals("capture_d_ecran_2012_08_02_a_12.45.29.png", uploader.serverFilename("Capture d’écran 2012-08-02 à 12.45.29.png")); 

을하지만 실제 행동, 즉, 톰캣 6의 맥 서버, 비슷한 이름의 파일이, 내가이라는 이름을 얻을 'capture_d_ao__cran_2012_07_10에서 로컬로 실행 ____ 10.22.01 :3210

이 단위 테스트는 잘 실행 .png ':

filename Capture d’écran 2012-07-10 à 10.22.01.png returns: capture_d_ao__cran_2012_07_10____10.22.01.png 

어딘가에 잘못된 인코딩이있는 것 같지만 어디서 그런 생각이 들지는 않습니다. 어떻게 해결할 수 있을지 알려주세요.

업데이트 : Java 소스 파일과 파일 업로드를 담당하는 HTML은 모두 UTF-8로 인코딩됩니다.

답변

0

자바 소스 파일이 다른 인코딩으로 저장되었다고 추측합니다 (Mac의 기본값은 MacRoman 인 경향이 있지만, you should always use UTF-8 everywhere).

OP의 요청에 따른 Copypasta'd.

+1

http://stackoverflow.com/questions/3665682/utf-8-encoding-and-http-parameters : 필터를 만들고이를 web.xml에 저장하여 모든 hTTP 통신을 UTF-8로 인코딩합니다. 트릭을 했어. 감사! –