文字のASCII値を取得する方法


回答:


1349

ここから:

関数ord()は、charのint値を取得します。そして、数値で遊んだ後に元に戻したい場合は、関数chr(​​)がうまくいきます。

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

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

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

Python 3 chrでは、の代わりに使用できますunichr


ord()-Python 3.6.5rc1ドキュメント

ord()-Python 2.7.14ドキュメント


どのエンコーディングを使用してchrで?
njzk2

15
注CHRもPythonでunichr 3.作用すること chr(31415) -> '窷'
ウィリアム・

6
@ njzk2:Python 2でバイト文字列を返す文字エンコーディングを使用しませんchr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'。たとえば、を文字として解釈するのはあなた次第です。Python 3(またはunichrPython 2)では、入力番号はUnicodeコードポイント整数の序数として解釈されますunichr(0x439) == '\u0439'(最初の256の整数はlatin-1:と同じマッピングを持っています。unichr(0xe9) == b'\xe9'.decode('latin-1')最初の128 unichr(0x0a) == b'\x0a'.decode('ascii')は-ascii:これはUnicodeであり、 Python)。
jfs 2014

4
関数が「ord」と呼ばれるのはなぜですか?
eLymar 2018

6
@eLymar:これは「序数」の略で、「序数」と同様の言語的ルーツを持っています。つまり、文字の記号表現ではなく数値です
Jacob Krall

166

ord()それ自体はASCII値を与えないことに注意してください。文字の数値は、エンコードがどのようなものであっても得られます。したがって、ord('ä')Latin-1を使用している場合は228の結果になり、TypeErrorUTF-8を使用している場合はの結果が発生します。ユニコードを渡すと、代わりにUnicodeコードポイントを返すこともできます。

>>> ord(u'あ')
12354

15
特定の状況で使用しているエンコードをどのようにして見つけることができますか?
Mustache

1
@Moustache:Python3では、すぐに使えるUnicodeを使用します。
トリカス

オブジェクトタイプによって異なります。Python3(str):unicodeデフォルト。Python3(bytes):str(b'\xc3\x9c', 'ascii')-> UnicodeDecodeErrorが発生します。Python3(bytes):str(b'\xc3\x9c', 'utf-8')->はÜを返します。6つのパッケージを調べることもできます。
はま


36

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

for ch in mystr:
    code = ord(ch)

または少し速い:

for code in map(ord, mystr):

コードを直接反復するPythonネイティブ型に変換します。Python 3では、それは取るに足らないことです。

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

また、Python 2.6 / 2.7では、Py3スタイルのbytesオブジェクトがないため(これ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両方のローカルテスト、反復処理でstrそのASCIIコードを使用して取得するmap(ord, mystr)ために約2倍の時間がかかってオフ開始をlen10 str使用するよりbytearray(mystr)PY2やmystr.encode('ascii')PY3に、としてstr長くなる、乗数が支払いましたmap(ord, mystr)上昇〜6.5x〜7x。

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


3

文字のASCIIコードを取得するには、ord()関数を使用できます。

次にコード例を示します。

value = input("Your value here: ")
list=[ord(ch) for ch in value]
print(list)

出力:

Your value here: qwerty
[113, 119, 101, 114, 116, 121]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.