> 백엔드 개발 > Golang > Go는 문자열에서 변환할 수 없는 바이트를 어떻게 처리하고 감지합니까?

Go는 문자열에서 변환할 수 없는 바이트를 어떻게 처리하고 감지합니까?

Barbara Streisand
풀어 주다: 2024-12-06 00:20:16
원래의
340명이 탐색했습니다.

How Does Go Handle and Detect Unconvertible Bytes in Strings?

Go 문자열에서 변환할 수 없는 바이트 감지

Go에서 특정 바이트 시퀀스는 유효한 유니코드 문자로 해석될 수 없습니다. 원활한 문자열 처리를 위해서는 이러한 잘못된 시퀀스를 감지하는 것이 중요합니다. 자세한 설명은 다음과 같습니다.

UTF-8 유효성 검사:

Tim Cooper가 언급했듯이 utf8.Valid를 사용하여 UTF-8 유효성을 확인할 수 있습니다. 그러나 Go 문자열에는 UTF-8이 아닌 문자가 포함될 수 있다는 점에 유의하는 것이 중요합니다. 이는 문자열이 본질적으로 바이트 조각이고 이러한 바이트가 항상 UTF-8 인코딩을 따르지 않을 수 있기 때문입니다.

디코딩 동작:

Go는 UTF만 수행합니다. -8 두 가지 특정 인스턴스에서 디코딩:

  • for i, r := range s를 사용하여 문자열 반복, 여기서 r은 유니코드 코드 포인트(룬 유형)를 나타냅니다.
  • []룬을 사용하여 문자열을 룬 조각으로 변환

이 두 경우 모두 유효하지 않은 UTF- 8자는 지원되지 않는 문자의 자리 표시자 역할을 하는 유니코드 코드 포인트 U FFFD로 대체됩니다. glyphs.

충돌 예외:

이러한 변환은 절대 충돌하지 않습니다. 따라서 U FFFD를 대체할 수 없는 입력을 처리할 때와 같이 애플리케이션에서 요구하는 경우에만 UTF-8 유효성을 명시적으로 확인해야 합니다.

예:

다음 코드는 Go가 잘못된 UTF-8을 처리하는 방법을 보여줍니다. bytes:

package main

import "fmt"

func main() {
    a := []byte{0xff}
    s := string(a)
    fmt.Println(s)
    for _, r := range s {
        fmt.Println(r)
    }
    rs := []rune(s)
    fmt.Println(rs)
}
로그인 후 복사

출력:

�
65533
[65533]
로그인 후 복사

보시다시피 문자열을 전체적으로 인쇄할 때 잘못된 바이트 시퀀스는 �로 표시됩니다. 반복되면 U FFFD에 대한 유니코드 코드 포인트가 반환됩니다. 그리고 룬 조각으로 변환하면 U FFFD를 나타내는 단일 룬을 반환합니다.

따라서 Go는 유효하지 않은 UTF-8 바이트를 문자열로 변환할 때 충돌을 일으키지 않지만 구체적인 사항을 알아두는 것이 중요합니다. 애플리케이션에서 그에 따라 행동을 처리합니다.

위 내용은 Go는 문자열에서 변환할 수 없는 바이트를 어떻게 처리하고 감지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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