1202

Pythonで文字のASCII値を取得するにはどうすればよいですか?int

4

5 に答える 5

1580

ここから:

この関数ord()は、charのint値を取得します。そして、あなたが数字で遊んだ後に元に戻したい場合には、関数chr()がトリックを行います。

>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>

Python 2には、順序が引数であるUnicodeunichr文字を返す関数もありました。unichr

>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'

chrPython 3では、の代わりにを使用できますunichr


ord()-Python3.6.5rc1のドキュメント

ord()-Python2.7.14ドキュメント

于 2008-10-22T20:43:04.443 に答える
181

ord()それ自体はASCII値を提供しないことに注意してください。どんなエンコーディングでも文字の数値を提供します。したがって、ord('ä')Latin-1を使用している場合は結果が228になり、TypeErrorUTF-8を使用している場合は結果が大きくなる可能性があります。ユニコードを渡すと、代わりにUnicodeコードポイントを返すこともできます。

>>> ord(u'あ')
12354
于 2008-10-22T23:19:20.757 に答える
56

あなたは探している:

ord()
于 2008-10-22T20:41:56.817 に答える
41

受け入れられた答えは正しいですが、ASCII 文字全体を一度に ASCII コードに変換する必要がある場合は、これを行うためのより賢い/効率的な方法があります。代わりに:

for ch in mystr:
    code = ord(ch)

または少し速い:

for code in map(ord, mystr):

コードを直接反復する Python ネイティブ型に変換します。Python 3 では、簡単です。

for code in mystr.encode('ascii'):

bytesまた、Python 2.6/2.7 では、Py3 スタイルオブジェクト (bytesは のエイリアスでstrあり、文字単位で反復します) を持たないため、少しだけ複雑になりますが、次のものがありますbytearray

# If mystr is definitely str, not unicode
for code in bytearray(mystr):

# If mystr could be either str or unicode
for code in bytearray(mystr, 'ascii'):

序数でネイティブに反復する型としてエンコードすると、変換がはるかに高速になります。Py2.7 と Py3.5 の両方でのローカル テストでは、astrを使用して ASCII コードを取得するために a を反復すると、Py2 またはPy3 で使用するよりも10map(ord, mystr)に約 2 倍の時間がかかります。 〜6.5x-7xに。lenstrbytearray(mystr)mystr.encode('ascii')strmap(ord, mystr)

唯一の欠点は、変換が一度に行われるため、最初の結果に少し時間がかかる可能性があり、本当に巨大な一時的な/strが比例して大きくなる可能性があることですが、これによりページのスラッシングが発生しない限り、これは問題にならない可能性があります.bytesbytearray

于 2016-03-25T17:56:08.113 に答える