> 백엔드 개발 > Golang > BOM 및 비BOM 인코딩을 모두 처리하면서 Go에서 UTF-16 텍스트 파일을 어떻게 올바르게 읽을 수 있습니까?

BOM 및 비BOM 인코딩을 모두 처리하면서 Go에서 UTF-16 텍스트 파일을 어떻게 올바르게 읽을 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-27 15:32:11
원래의
323명이 탐색했습니다.

How Can I Correctly Read UTF-16 Text Files in Go, Handling Both BOM and Non-BOM Encodings?

Go에서 UTF-16 텍스트 파일을 문자열로 읽기

Go에서 UTF-16 텍스트 파일을 읽을 때 바이트가 ASCII로 해석되는 문제가 발생할 수 있습니다. 이는 표준 bufio.NewReader 함수가 유니코드를 올바르게 처리하지 않기 때문에 발생합니다.

해결책

BOM이 있는 UTF-16

"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이 없는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿