python - nombre - retourner le code ascii d un caractère en c#




Comment vérifier si une chaîne en Python est en ASCII? (10)

Comme la answer @ RogerDahl, mais il est plus efficace de court-circuiter en annulant la classe de caractères et en utilisant search au lieu de find_all ou match .

>>> import re
>>> re.search('[^\x00-\x7F]', 'Did you catch that \x00?') is not None
False
>>> re.search('[^\x00-\x7F]', 'Did you catch that \xFF?') is not None
True

J'imagine qu'une expression régulière est bien optimisée pour cela.

Je veux vérifier si une chaîne est en ASCII ou non.

Je suis conscient de ord() , cependant quand j'essaie ord('é') , j'ai TypeError: ord() expected a character, but string of length 2 found . J'ai compris que c'était dû à la façon dont j'ai construit Python (comme expliqué dans la documentation de ord() ).

Y a-t-il un autre moyen de vérifier?


J'ai trouvé cette question en essayant de déterminer comment utiliser / encoder / décoder une chaîne dont je n'étais pas sûr de l'encodage (et comment échapper / convertir des caractères spéciaux dans cette chaîne).

Ma première étape aurait dû être de vérifier le type de la chaîne - je ne me suis pas rendu compte que je pourrais obtenir de bonnes données sur sa mise en forme de type (s). Cette réponse a été très utile et a atteint la véritable racine de mes problèmes.

Si vous obtenez un grossier et persistant

UnicodeDecodeError: le codec 'ascii' ne peut pas décoder l'octet 0xc3 en position 263: ordinal pas dans la plage (128)

en particulier lorsque vous ENCODING, assurez-vous que vous n'essayez pas d'unicode () une chaîne qui est déjà unicode- pour une raison terrible, vous obtenez des erreurs de codec ascii. (Voir aussi la recette Python Kitchen , et les didacticiels Python docs pour mieux comprendre comment cela peut être terrible.)

Finalement, j'ai déterminé que ce que je voulais faire était:

escaped_string = unicode(original_string.encode('ascii','xmlcharrefreplace'))

Le codage par défaut de mon fichier sur utf-8 (mis au début de votre fichier python) était également utile dans le débogage:

# -*- coding: utf-8 -*-

Cela vous permet de tester des caractères spéciaux ('àéç') sans avoir à utiliser leurs échappements unicode (u '\ xe0 \ xe9 \ xe7').

>>> specials='àéç'
>>> specials.decode('latin-1').encode('ascii','xmlcharrefreplace')
'àéç'

Je pense que vous ne posez pas la bonne question ...

Une chaîne en python n'a pas de propriété correspondant à 'ascii', utf-8, ou tout autre encodage. La source de votre chaîne (que vous l'ayez lue à partir d'un fichier, saisie à partir d'un clavier, etc.) peut avoir encodé une chaîne unicode en ascii pour produire votre chaîne, mais c'est là que vous devez aller chercher une réponse.

Peut-être la question que vous pouvez vous poser est: "Cette chaîne est-elle le résultat de l'encodage d'une chaîne unicode en ASCII?" - Vous pouvez y répondre en essayant:

try:
    mystring.decode('ascii')
except UnicodeDecodeError:
    print "it was not a ascii-encoded unicode string"
else:
    print "It may have been an ascii-encoded unicode string"

Pour éviter que votre code ne tombe en panne, vous voudrez peut-être utiliser un try-except pour attraper TypeErrors

>>> ord("¶")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 2 found

Par exemple

def is_ascii(s):
    try:
        return all(ord(c) < 128 for c in s)
    except TypeError:
        return False

Python 3 way:

isascii = lambda s: len(s) == len(s.encode())

Que diriez-vous de faire cela?

import string

def isAscii(s):
    for c in s:
        if c not in string.ascii_letters:
            return False
    return True

Une piqûre ( str -type) en Python est une série d'octets. Il n'y a aucun moyen de dire juste à partir de la chaîne si cette série d'octets représente une chaîne ASCII, une chaîne dans un jeu de caractères 8 bits comme ISO-8859-1 ou une chaîne encodée avec UTF-8 ou UTF-16 ou autre .

Cependant, si vous connaissez le codage utilisé, vous pouvez alors decode le str en une chaîne unicode et ensuite utiliser une expression régulière (ou une boucle) pour vérifier si elle contient des caractères en dehors de la plage qui vous intéresse.


Vincent Marchetti a la bonne idée, mais str.decode a été déprécié dans Python 3. En Python 3, vous pouvez faire le même test avec str.encode :

try:
    mystring.encode('ascii')
except UnicodeEncodeError:
    pass  # string is not ascii
else:
    pass  # string is ascii

Notez que l'exception que vous souhaitez capturer est également passée de UnicodeDecodeError à UnicodeEncodeError .


Vous pouvez utiliser la bibliothèque d'expressions régulières qui accepte la définition standard Posix [[: ASCII:]].


def is_ascii(s):
    return all(ord(c) < 128 for c in s)




ascii