我正在使用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
答案 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