Maison > développement back-end > Golang > Comment Go gère-t-il les séquences d'octets invalides lors de la conversion en chaînes ?

Comment Go gère-t-il les séquences d'octets invalides lors de la conversion en chaînes ?

Linda Hamilton
Libérer: 2024-12-06 04:44:17
original
512 Les gens l'ont consulté

How Does Go Handle Invalid Byte Sequences When Converting to Strings?

Validation des séquences d'octets invalides dans Go

Lorsque vous essayez de convertir une tranche d'octets ([]byte) en chaîne dans Go, c'est crucial pour gérer les scénarios dans lesquels les séquences d'octets ne peuvent pas être converties en un Unicode valide chaîne.

Solution :

1. Contrôle de validité UTF-8 :

Comme suggéré par Tim Cooper, vous pouvez utiliser la fonction utf8.Valid pour déterminer si une tranche d'octets est une séquence UTF-8 valide. Si utf8.Valid renvoie false, cela indique la présence d'octets invalides.

2. Gestion des octets non UTF-8 :

Contrairement à la croyance populaire, les octets non UTF-8 peuvent toujours être stockés dans une chaîne Go. En effet, les chaînes dans Go sont essentiellement des tranches d'octets en lecture seule. Ils peuvent contenir des octets UTF-8 non valides, qui peuvent être consultés, imprimés ou même reconvertis en tranche d'octets sans problème.

Cependant, Go effectue le décodage UTF-8 dans des scénarios spécifiques :

  • Boucles de plage : Lors de l'itération sur les points de code Unicode d'une chaîne à l'aide d'une boucle de plage, la valeur runique renvoyée est le point de code Unicode, avec UTF-8 invalide remplacé par le caractère de remplacement U FFFD (�).
  • Conversion en runes : Conversion d'une chaîne en une tranche de runes ([]rune) décodera la chaîne entière, en remplaçant UTF-8 invalide par U FFFD.

Remarque : Ces les conversions n'entraînent jamais de panique, il est donc seulement nécessaire de vérifier activement la validité de l'UTF-8 si cela est essentiel pour votre application (par exemple, si U FFFD est inacceptable et qu'une erreur doit être générée).

Exemple de code :

Le code suivant montre comment Go gère une tranche d'octets contenant des éléments non valides UTF-8 :

package main

import "fmt"

func main() {
    a := []byte{0xff} // Invalid UTF-8 byte
    s := string(a)
    fmt.Println(s)       // �
    for _, r := range s { // Range loop replaces invalid UTF-8 with U+FFFD
        fmt.Println(r) // 65533
    }
    rs := []rune(s) // Conversion to runes decodes UTF-8 (U+FFFD)
    fmt.Println(rs)    // [65533]
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal