Comment réparer l'encodage UTF pour les espaces blancs?
Dans mon code C#, je suis l'extraction de texte à partir d'un document PDF. Quand je fais cela, je reçois une chaîne de caractères en UTF-8 ou Unicode (je ne suis pas sûr). Lorsque j'utilise Encoding.UTF8.GetBytes(src);
pour le convertir en un tableau d'octets, j'ai remarqué que l'espace est fait de deux personnages avec des valeurs d'octets de 194 et 160.
Par exemple la chaîne "CLE action" ressemble
[67, 76, 69, 194 ,160, 65 ,99, 116, 105, 111, 110]
dans un tableau d'octets, où l'espace est de 194 et 160... Et à cause de cette src.IndexOf("CLE action");
est de retour -1 quand j'en ai besoin pour retour 1.
Comment puis-je résoudre le codage de la chaîne?
source d'informationauteur omega
Vous devez vous connecter pour publier un commentaire.
194 160
est le codage UTF-8 d'unNO-BREAK SPACE
codepoint (le même codepoint que HTML appels
).Donc, c'est vraiment pas un espace, même s'il ressemble à un. (Vous verrez, il ne sera pas de retour automatique à la ligne, par exemple). Une expression régulière pour
\s
serait le match, mais un simple comparaison avec un espace qui ne sera pas.De remplacer simplement les NO-BREAK espaces, vous pouvez effectuer les opérations suivantes:
Interprétation
\xC2\xA0
(=194, 160
) comme UTF8 produit\xA0
qui est de l'unicode l'espace insécable. C'est un caractère différent de celles de l'espace ordinaire et donc, ne correspond pas ordinaire des espaces. Vous avez de match contre la non-rupture de l'espace ou de l'utilisation floue-correspondance contre n'importe quel espace.En UTF8 valeur de caractère c2 a0 (194 160) est définie comme l'ABSENCE de SAUT de l'ESPACE. Conformément à la norme ISO/CEI 8859 c'est un espace qui ne permet pas un saut de ligne à insérer. Normalement, le traitement de texte logiciel suppose qu'un saut de ligne peut être inséré à n'importe quel caractère espace blanc (c'est la façon dont word wrap est normalement mis en œuvre). Vous devriez être en mesure de se contenter de faire un remplacement dans votre chaîne de caractères avec un espace normal pour résoudre le problème.