具有非ascii字符的RPython ord()

时间:2014-04-24 14:16:44

标签: python unicode utf-8 pypy rpython

我正在使用PyPy在RPython中创建一个虚拟机。我的问题是,我正在将每个字符转换为数字表示。例如,转换字母“a”提供了这个结果,97。然后我将97转换为十六进制,所以我得到:0x61。

因此,例如,我正在尝试将字母“á”转换为十六进制表示形式,该表示形式应为:0xe1但是我得到0xc3 0xa1

我需要使用特定的编码吗?目前我正在使用UTF-8。

- UPDATE -

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

2 个答案:

答案 0 :(得分:0)

#!/usr/bin/env python
# -*- coding: latin-1 -*-

char = 'á'

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

给我:

225
0xe1
0xe1

答案 1 :(得分:0)

您正在使用Python语言的第2版,因此您的字符串:"á"是一个字节字符串,其内容取决于源文件的编码。如果编码是UTF-8,则它们是C3 A1 - 字符串包含两个字节。

如果要将其转换为Unicode代码点(也称为字符)或UTF-16代码点(取决于您的Python安装),请先将其转换为unicode,例如使用.decode('utf-8')。< / p>

# -*- 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