자바 txt파일 decoding Exception
프로젝트에서 연계 전문소통 과정에서 일어난 오류였다
연계 파일은 txt 확장자인 파일이였으며
header
record...
trailer
로 구성되었고 File to DB방식으로 돌아간다
기관과 서로간에 EUC-KR로 소통하기로 약속했다
운영을 하면서 한 개 기관만 파일 처리 과정에서 간혹 Exception이 발생했지만
EUC-KR로 Encoding을 하지않은걸로 추정한 뒤 다른 우선 순위 일부터 처리하고
나중에 와서 확인한 결과 해당 파일은 EUC-KR로 Encoding된게 맞았다
오류 관련하여 구글에 검색해도 확실하게 답은 나오지 않았지만
원인에 가장 근접하다고 생각한게
readAllLines로 파일을 읽으면 같은 인코딩 단위라 할지라도
완성형 한글이나 몇몇 한자는 읽을때 Exception이 발생한다고 한다(Byte 단위의 문제)
요약하자면
List<String> = readAllLines => String[] = readAllBytes로 변경했다
수정해서 돌려본 결과 Exception도 발생하지 않고
컬렉션에서 배열로 반복문 수정만 하게되어 소스 변동이 굉장히 적어 메리트가 있었다...
파일 헤더 부분(전문 헤더가 아니다)에서 어떤방식으로 인코딩되었는지 가져와서 해결하는 방법도 있다고 들었는데
시간이 없어서 급하게 수정했으니 한글이 깨지거나하는 자잘한 오류는 있을 수 있다
우리는 전문이다보니 글자수 제한도 있고 한글은 워낙 깨져서 데이터가 들어오는 일이 비일비재라
Exception으로 처리도 못하고 쓰레드가 죽지는 않으니 해당 record만 오류 전문 처리로 마무리했다