Go에서 UTF-16 텍스트 파일을 읽을 때 바이트가 ASCII로 해석되는 문제가 발생할 수 있습니다. 이는 표준 bufio.NewReader 함수가 유니코드를 올바르게 처리하지 않기 때문에 발생합니다.
"golang.org/x의 최신 버전 /text/encoding/unicode"에는 BOM을 자동으로 감지하고 해석하여 디코딩하는 unicode.BOMOverride가 도입되었습니다. UTF-16이 맞습니다. 다음은 ReadFileUTF16()을 사용하는 예입니다.
func ReadFileUTF16(filename string) ([]byte, error) { raw, err := ioutil.ReadFile(filename) if err != nil { return nil, err } win16be := unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM) utf16bom := unicode.BOMOverride(win16be.NewDecoder()) unicodeReader := transform.NewReader(bytes.NewReader(raw), utf16bom) decoded, err := ioutil.ReadAll(unicodeReader) return decoded, err }
이 함수는 BOM이 있는 UTF-16 파일을 디코딩합니다.
파일이 BOM이 포함되어 있지 않은 경우 다음 코드를 사용할 수 있습니다.
func ReadFileUTF16WithoutBOM(filename string) ([]byte, error) { f, err := os.Open(filename) if err != nil { return nil, err } r := bufio.NewReader(f) // Read past the BOM, if any. var b, e = r.Peek(2) if (b[0] == 0xFF && b[1] == 0xFE) || (b[0] == 0xFE && b[1] == 0xFF) { r.Discard(2) } // Read the rest of the file. decoded, err := ioutil.ReadAll(r) return decoded, err }
이것은 함수는 모든 BOM을 건너뛰고 파일을 UTF-16으로 읽습니다.
ReadFileUTF16() 또는 ReadFileUTF16WithoutBOM()을 사용하면 BOM 및 비BOM UTF-16 텍스트를 모두 처리할 수 있습니다. 파일을 Go로 저장하여 데이터의 정확한 디코딩과 표현을 보장합니다.
위 내용은 BOM 및 비BOM 인코딩을 모두 처리하면서 Go에서 UTF-16 텍스트 파일을 어떻게 올바르게 읽을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!