[Issue]
UTF-8로 인코딩된 파일을 불러와서 텍스트를 read할 때 첫 char로 형태가 없는 character가 read된다.
첫 어절을 read할 때 원하는 값이 read되지 않는 문제가 있었다.
(해결과정)
.txt의 내용이 <d a k l> 일때
(1) String d1 ="d"
(2) String d2 = .txt내용의 첫어절
- d1과 d2를 print해봤을 때는 같은 값 d가 출력된다.
- 그러나 d1.equals(d2)는 false값이 나온다.
- d1의 length는 1이고, d2의 length는 2이다.
- d2.charAt(0)의 int값을 확인한 결과 65279인것으로 확인
[해결]
.txt의 첫 char를 int형으로 출력해본 결과 65279이었다.
이는 UTF-8로 인코딩 된 것임을 알리기 위해 파일의 제일 앞에 붙여주는 BOM이라고 한다.
그래서 나는 이 char를 먼저 읽어주고 작업을 했다.
FileReader fileReader = new FileReader("test.txt");
fileReader.read(); //BOM를 먼저 읽어준 후
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line = null;
while((line=bufferedReader.readLine())!=null) //한 라인씩 읽어들인다.
System.out.println("line : " +line);
윈도우 기본프로그램인 메모장에서 UTF-8형식으로 저장을 하는데 이떄 UTF-8이라는것을 나타내기 위하여 BOM(Byte Order Mark)를 파일의 가장 앞부분에 추가하는 것이다. UTF-8의 BOM은 EF BB BF 값으로 표현이 된다. (UTF-16등과같은 경우에는 다른 BOM을 사용한다.)
<출처 :https://frontjang.info/>