Go에서 잘못된 바이트 시퀀스 감지
Go에서는 바이트 슬라이스([]byte)를 문자열로 변환할 때 다음이 가능합니다. 유니코드로 변환할 수 없는 잘못된 바이트 시퀀스가 발생합니다. 이는 모든 바이트 시퀀스가 유효한 UTF-8 문자를 나타내는 것은 아니라는 사실에서 발생합니다.
이러한 발생을 감지하려면 두 가지 접근 방식을 사용할 수 있습니다.
UTF-8 유효성 검사:
Tim Cooper가 언급했듯이 utf8.Valid 함수는 바이트 슬라이스에 유효한 내용이 포함되어 있는지 테스트하는 데 사용될 수 있습니다. UTF-8 바이트. 결과가 false인 경우 유효하지 않은 바이트 시퀀스가 있음을 나타냅니다.
문자열 변환 고려 사항:
일반적인 가정과 달리 Go에서는 비UTF 변환을 허용합니다. -8바이트 조각을 문자열로 변환합니다. 그러나 Go의 문자열은 본질적으로 읽기 전용 바이트 슬라이스이므로 유효한 UTF-8이 아닌 바이트를 수용할 수 있다는 점에 유의하는 것이 중요합니다.
Go가 자동으로 UTF-8을 수행하는 것은 특정 상황에서만 가능합니다. 8 디코딩:
두 경우 모두 , 유효하지 않은 UTF-8 문자는 U FFFD 대체 문자로 대체됩니다. 이 교체는 모든 애플리케이션에서 허용되지 않을 수 있으므로 필요한 경우 명시적인 UTF-8 유효성 검사를 수행하는 것이 좋습니다.
예:
다음 Go 프로그램을 고려하세요.
package main import ( "fmt" "unicode/utf8" ) func main() { a := []byte{0xff} s := string(a) // Check UTF-8 validity if utf8.Valid(a) { fmt.Println("Valid UTF-8") } else { fmt.Println("Invalid UTF-8") } // Output string fmt.Println(s) }
출력:
Invalid UTF-8 �
이 예에서는 바이트 슬라이스 a에 잘못된 바이트 시퀀스가 포함되어 있어 "잘못된 UTF-8" 메시지가 표시됩니다. 이후 문자열로 변환 시 유효하지 않은 바이트는 대체 문자 "�"로 표시됩니다.
위 내용은 Go에서 잘못된 UTF-8 바이트 시퀀스를 어떻게 감지할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!