2010-12-01 7 views
2

이클립스에서 UTF-8로 된 java 파일을 가지고 있으며 악센트가 포함 된 일부 문자열이 있습니다.é가 &195; # 169가되고이 인코딩 문제를 해결하려면 어떻게해야합니까?

자바 파일 자체에서 액센트가 작성되어 è으로 저장됩니다. 속도 é를 사용하여 생성되는 XML의 은 FOP 및 및 XSL 템플릿을 이용하여 생성 된 PDF 파일 é 이되고, 출력은 그래서 아마도 인코딩 문제

© A와 표시 모든 것은 UTF-8이어야합니다. 이상한 점은 응용 프로그램을 실행하는 환경 (창)의 로컬 환경에서 전체 프로세스가 작동하고 올바른 악센트가 è 인 것을 PDF에 표시한다는 것입니다.

그러나 응용 프로그램을 maven으로 빌드하고 (유닉스 환경에) 배포하면 위에 설명한 문제가 발생합니다.

+2

Maven/Velocity/PDF 생성기 부품에 대해서는 확실하지 않지만 유닉스로의 이전은 텍스트 기반 파일을 UTF-8로 취급하지 않았다. Unix에서 UTF-8 가능 편집기로 파일을 열고 다른 파일을 제외 시키십시오. – BalusC

+0

사소한 점이지만 Java 파일은 일반적으로 UCS-2 또는 UTF-16으로 인코딩됩니다. – GaryF

+2

@GaryF : * .java * 파일 인코딩과 JVM의 내부 문자열 표현 사이에 다소 혼란 스럽다고 생각합니다. A * .java * 파일은 텍스트 파일이며 메타 데이터가없고 인코딩은 파일을 만드는 데 사용하는 편집기에 따라 다릅니다. 예를 들어 IntelliJ IDEA (Java IDE 선택)에 'é'를 입력하고 파일을 저장하면 기본적으로 UTF-8 파일로 저장됩니다. 그 외에도 UCS-2로 인코딩 된 * .java * 파일을 마지막으로 본 기억이 정말 힘듭니다. – SyntaxT3rr0r

답변

3

아마도 이클립스는 Maven과 다른 javac 명령 줄을 사용하여 파일을 컴파일하고 있습니다.

Java를 컴파일 할 때 소스 파일의 인코딩을 컴파일러에 알려야합니다 (비 ASCII 문자가 포함되어 있고 기본값이 작동하지 않는 경우).

javac -encoding utf8 MyCode.java 

내가에게 메이븐에서이 문제를 해결하는 방법을 생각 은 pom.xml 파일에 이것을 추가하는 것입니다

<project> 
    ... 
    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    ... 
</project> 

(내가 가진 그 a Maven FAQ about a slightly different issue에서.)

당신은 할 수 대신 Java 파일에서 못생긴 유니 코드 이스케이프 시퀀스를 사용하여 인코딩 문제를 완전히 피하십시오. é\u00e9이됩니다. 인간에게는 더 나쁘고 토스터에게는 더 쉽습니다. (Perlis가 말했듯이, "인간 - 기계 공생에서 인간은 조정해야합니다 : 기계는 할 수 없습니다.")

+0

이것은 Windows에서 로컬로 작동하는 이유를 설명하지 않습니다. 내가 이해하는 한, 빌드/컴파일은 Windows에서 일어나고 파일은 유닉스로 옮겨진다. 그러나 유니 코드 이스케이프를 사용하는 것이 workaround/prevent로 좋은 제안입니다. – BalusC

+0

@ BalusC 내 이론은 이클립스 빌드가 메이븐 빌드와 다르다는 것이다. –

+0

+1 ... 맞습니다. 필요한 경우 유니 코드 이스케이프 시퀀스 및 문자열 외부화. – SyntaxT3rr0r

관련 문제