0

PyPy を使用して RPython で仮想マシンを作成しています。私の問題は、各文字を数値表現に変換していることです。たとえば、文字「a」を変換すると、97 という結果が得られます。次に、97 を 16 進数に変換すると、0x61 が得られます。

たとえば、文字「á」を 0xe1 の 16 進数表現に変換しようとしていますが、代わりに 0xc3 0xa1 を取得します。

使用する必要がある特定のエンコーディングはありますか? 現在、UTF-8 を使用しています。

- アップデート -

instr は"á", (引用符を含む)

for char in instr:
    char = str(int(ord(char)))
    char = hex(int(char))
    char = char[2:]
    print char # Prints 22 C3 A1 22, 22 is each of the quotes
    # The desired output is 22 E1 22
4

2 に答える 2

0

Python 言語のバージョン 2 を使用しているため、string:"á"はバイト文字列であり、その内容はソース ファイルのエンコーディングによって異なります。エンコーディングが UTF-8 の場合C3 A1、文字列には 2 バイトが含まれます。

Unicode コードポイント (別名文字) または UTF-16 コードポイント (Python のインストールによって異なります) に変換する場合unicodeは、たとえば を使用して最初に変換し.decode('utf-8')ます。

# -*- encoding: utf-8 -*-

def stuff(instr):
  for char in instr:
    char = str(int(ord(char)))
    char = hex(int(char))
    # I'd replace those two lines above with char = hex(ord(char))
    char = char[2:]
    print char 

stuff("á")
print("-------")
stuff(u"á")

出力:

c3
a1
-------
e1
于 2014-04-26T19:24:54.990 に答える
0
#!/usr/bin/env python
# -*- coding: latin-1 -*-

char = 'á'

print str(int(ord(char)))
print hex(int(char))
print char.decode('latin-1')

Gives me:

225
0xe1
0xe1
于 2014-04-24T14:23:49.023 に答える