인코딩 관련 질문드립니다.
안녕하세요.
간단한 자바 프로그램을 하나 짰는데, 인코딩 문제가 있어서, 질문을 드립니다.
환경 : CentOS7
자바 버전 : 1.79
사용 툴 : 이클립스
파일 명 : 핀란드어
파일 내용 : 중간 중간 핀란드어 섞임
시나리오 : 핀란드 파일 읽어서, 특정 문구만 추려서 다른 폴더에 저장하기
1. 디렉터리에 핀란드 파일 모아놓기
2. List[] 에 해당 디렉터리 파일 이름 전부 넣기. listFiles() 함수 사용.
3. 뽑아서 for문 돌리고 전부 찾아내기.
간단합니다.. 여기서 위 파일 명을 가져올 때 문제가 생기는 부분은 쉘로 넘어갔으나..
내용에 핀란드어가 있는 부분은 어차피 주석이라 삭제하면 되는데, 이게 2byte냐 1byte냐에 따라
특정 부분을 처리할 때 제대로 처리가 되지 않습니다.
근원적인 부분은 파일 명을 변경하지도 않고 내용도 안 변경해도 자바 코드가 현재 시나리오 대로 제대로
처리하면 되는데요. 나머지는 잘 처리가 되는데, 핀란드 어 부분이 있게되면 vi로 해당 파일을 열어보니
해당 부분에서 처리가 이상하게 되서, 아예 파싱 자체가 이상하게 됩니다.
그래서 인코딩을 제대로 하고 싶은데요..
핀란드어 Encoding 을 찾아보니, ISO-8859-1 혹은 ISO-8859-15 입니다.
그래서 locale -a | grep 8859 를 검색해보니, 꽤 많이 나오더군요.
그 중,
sv_FI.iso88591
sv_FI.iso885915@euro
를 export LANG= 으로 넣고 프로그램을 실행해도 문제는 해결되지 않아서, 질문드립니다.
선배님들은 인코딩처리를 어떻게 하시나요?
인코딩을 알면 그 인코딩을 사용해서 읽어야지요.
인코딩을 알면 그 인코딩을 사용해서 읽어야지요. LANG 환경 변수와는 무관한 일입니다.
인코딩이 확실치 않으면 인코딩을 추측해주는 encoding auto detector 들이 있으니 한번 알아보세요. 물론 정확하게 알려준다는 보장은 없습니다만 시도해볼 필요는 있겠지요.
답변해주셔서 정말 감사합니다.
안녕하세요.
우선, 인코딩할 때 위 방법도 넣었는데요. 구글로 검색을 해보니, 핀란드어는 Encoding 타입이 "ISO-8859-15" 라고 합니다. 그래서 InputStreamReader 의 Encoding 타입에 저렇게 넣고 처리를 해도 진행이 되지 않아서요.
의심되는 부분은 저 export LANG=iso-8859-15 로 설정하고 vi로 파일을 열어도 글자가 깨져보이는데, 이럴 경우는 인코딩 타입이 틀렸고, 그래서 자바에서도 해당 파일을 Read할 때, 글자가 깨져서 안 읽히는 걸까요?
방법으로 읽고 있는데, 코드는 틀린 점이 없고, 인코딩 문제일까요? 저 인코딩 타입을 참조하는 부분은 아래 사이트를 사용했습니다. Finnish 라고 검색하면 사용가능한 인코딩 타입이 총 6개인데, 전부 안되네요..
http://scratchpad.wikia.com/wiki/Character_Encoding_Recommendation_for_Languages
<추가> 리눅스에서 file -i 명령어로 파일의 인코딩 타입을 확인한 결과, 다음과 같이 출력이 됩니다.
> 의심되는 부분은 저 export LANG=iso
> 의심되는 부분은 저 export LANG=iso-8859-15 로 설정하고 vi로 파일을 열어도 글자가 깨져보이는데, 이럴 경우는 인코딩 타입이 틀렸고, 그래서 자바에서도 해당 파일을 Read할 때, 글자가 깨져서 안 읽히는 걸까요?
그럴 가능성이 크네요. encoding auto detector를 찾아보세요. 그리고 당연히 UTF-8과 UTF-16을 가장 먼저 시도해보셨어야할텐데 해보셨는지요?
답변해주셔서 정말 감사합니다! 해결했습니다.
우선 파싱은 정상적으로 처리가 됩니다.
문제는 해당 핀란드어 글자를 1byte로 처리할 것인가 2byte로 처리할 것인가였습니다. 생각해보니 왜 이전에 자바 프로그램을 돌렸을 때는 제대로 파싱이 되지 않았는지 이해가 되지 않지만, 제가 저장도 안하고 프로그램을 돌려서인가.. 라는 의심도 들고..
해결 방법 :
인코딩 값을 1, 3, 9, 13, 15 전부 테스트 하면서 다시 돌려본 결과 됩니다..ㅠㅠ
vi로 글자가 깨져보이더라도 해당 캐릭터가 1글자로 정상처리(41-42 이런 식으로 출력되는 것은 해당 문자가 2byte를 이미 사용했다는 것) 되면, 자바에서는 읽어서 처리할 때 문제는 없습니다. vi로 깨지는 부분은 다른 문제 같습니다.
정말 감사합니다!! :))
댓글 달기