BOM(바이트 순서 표시)을 사용하여 유니코드 파일 읽기
소개
유니코드 파일을 처리하는 경우 , BOM(Byte-Order Mark) 유무를 처리하는 것이 중요합니다. Go에는 BOM을 자동으로 감지하고 처리하는 솔루션이 내장되어 있지 않습니다. 그러나 이 시나리오를 해결하기 위한 실용적인 접근 방식이 있습니다.
버퍼 리더 접근 방식
버퍼 리더를 사용하면 파일의 처음 몇 바이트를 엿볼 수 있습니다. 다음은 간단한 예입니다.
<code class="go">import ( "bufio" "os" "log" ) func main() { fd, err := os.Open("filename") if err != nil { log.Fatal(err) } defer closeOrDie(fd) br := bufio.NewReader(fd) r, _, err := br.ReadRune() if err != nil { log.Fatal(err) } if r != '\uFEFF' { br.UnreadRune() // Not a BOM -- put the rune back } // Continue working with br as you would with fd }</code>
Seeker 인터페이스 접근 방식
io.Seeker 인터페이스를 구현하는 개체(예: *os.File)가 있는 경우 다음을 수행할 수 있습니다. 처음 3바이트를 확인하고 BOM이 아닌 경우 파일의 시작 부분으로 다시 검색하세요.
<code class="go">import ( "os" "log" ) func main() { fd, err := os.Open("filename") if err != nil { log.Fatal(err) } defer closeOrDie(fd) bom := [3]byte _, err = io.ReadFull(fd, bom[:]) if err != nil { log.Fatal(err) } if bom[0] != 0xef || bom[1] != 0xbb || bom[2] != 0xbf { _, err = fd.Seek(0, 0) // Not a BOM -- seek back to the beginning if err != nil { log.Fatal(err) } } // Continue reading real data from fd }</code>
고려 사항
이 예에서는 UTF-8 인코딩을 가정합니다. 다른 인코딩이나 검색할 수 없는 스트림을 처리해야 하는 경우 추가 전략이 필요할 수 있습니다.
위 내용은 Go에서 유니코드 파일의 BOM(바이트 순서 표시)을 어떻게 처리하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!