J'ai un tableau de données d'octets UTF-8. Je voudrais rechercher une chaîne spécifique dans le tableau d'octets en C#.Comment puis-je trouver l'index de départ d'une chaîne dans un tableau d'octets UTF-8? (C#)
byte[] dataArray = (some UTF-8 byte array of data);
string searchString = "Hello";
Comment puis-je trouver la première occurrence du mot « Bonjour » dans le tableau tableauDonnees et retourner un emplacement de l'index où la chaîne commence (où le « H » de « Bonjour » serait situé dans dataArray)?
Avant, j'utilisais à tort quelque chose comme:
int helloIndex = Encoding.UTF8.GetString(dataArray).IndexOf("Hello");
De toute évidence, ce code ne serait pas garanti de travailler depuis que je suis de retour l'index d'une chaîne, et non l'indice de l'UTF-8 tableau d'octets. Existe-t-il des méthodes C# intégrées ou des codes éprouvés et efficaces que je peux réutiliser?
Merci,
Matt
Je sais qu'il est tard pour le souligner, mais je Je trouve personnellement qu'il y a un conflit avec les connaissances que j'ai acquises de la publication de @JoelSpolky [Le minimum absolu que chaque développeur de logiciels doit absolument, positivement doit savoir sur Unicode et Jeux de caractères (pas d'excuses!)] (Http://www.joelonsoftware.com/articles/Unicode.html). Ce que vous dites est ceci: Si j'ai par exemple la chaîne 'var nl =" \ n ";' qui donne exactement un octet lors du codage en UTF8 'var bytes = new byte [] {10}' dont la valeur est ' 10' alors cela doit signifier que '10' ** ne peut jamais ** représenter la moitié ou le tiers d'un personnage chinois? –
Je n'essaie pas de dire que votre idée est même partiellement erronée. Je suis juste un peu confus au sujet de ce que vous dites et je veux clarifier les choses pour moi et peut-être d'autres. –
"cela doit signifier que 10 ne peut jamais représenter la moitié ou le tiers d'un caractère chinois" Je pense que c'est correct. Voir https://en.wikipedia.org/wiki/UTF-8#Description. Tous les octets de caractères multi-octets sont plus grands que le binaire 10000000 (0x80) qui est plus grand que "\ n" (0x10). –