2013-07-01 3 views
10

, 내가 출력으로이 얻을 -> 첫 번째 : 다음  다른 라인첫 번째 문자는 : 나는이 코드를 작성하는 경우 

try { 
    BufferedReader br = new BufferedReader(new FileReader(
      "myFile.txt")); 

    String line; 
    while (line = br.readLine() != null) { 
     System.out.println(line); 
    } 
    br.close(); 

} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

방법 나는 그것을 피할 수 있습니까?

+0

인코딩 때문일 것입니다. –

+3

아마도 BOM입니까? https://en.wikipedia.org/wiki/Byte_order_mark –

+1

[UTF-8 BOM] (https://en.wikipedia.org/wiki/Byte_order_mark)입니다. –

답변

1

인코딩에 문제가있을 수 있습니다. 이 시도 :

BufferedReader in = new BufferedReader(new InputStreamReader(
     new FileInputStream("yourfile"), "UTF-8")); 
+0

나는 그것을 확실히 말할 것이다 * 인코딩은 ;;) – Joey

+2

나는 이미 시도했다.  대신 '?'가됩니다. – Milton90

+0

사용중인 IDE 때문일 수 있습니다. 때로는 기본 운영 체제의 기본 인코딩을 설정합니다. – Tala

13

을이 순서가 UTF-8 byte order mark (BOM) 때문에 당신은 첫 번째 줄에 문자 를 얻고있다. 텍스트 파일이 BOM으로 시작하면 메모장과 같은 Windows 프로그램에 의해 생성 된 것일 수 있습니다.

이 문제를 해결하기 위해, 우리는 UTF-8로 명시 적으로 파일을 읽을 선택 대신에 어떤 기본 시스템의 문자 인코딩 (US-ASCII 등) :

UTF-8에서 다음
BufferedReader in = new BufferedReader(
    new InputStreamReader(
     new FileInputStream("myFile.txt"), 
     "UTF-8")); 

, 바이트 시퀀스는 한 문자 (U + FEFF)로 디코딩됩니다. 이 문자는 선택 사항입니다. 합법적 인 UTF-8 파일은이 파일로 시작하거나 시작하지 않을 수도 있습니다. 따라서 U + FEFF 인 경우에만 첫 번째 문자를 건너 뜁니다.

in.mark(1); 
if (in.read() != 0xFEFF) 
    in.reset(); 

이제 나머지 코드를 계속 진행할 수 있습니다.

관련 문제