【问题标题】:RPython ord() with non-ascii character具有非 ascii 字符的 RPython ord()
【发布时间】:2014-04-24 14:16:44
【问题描述】:

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

例如,我试图将字母“á”转换为十六进制表示,应该是:0xe1 但我得到的是 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

【问题讨论】:

    标签: python unicode utf-8 pypy rpython


    【解决方案1】:
    #!/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
    

    【讨论】:

    • 这还没有解决,我仍然得到“C3 A1”而不是“E1”。感谢您的帮助!
    • 你能发布你用来打印十六进制值的代码的 sn-p 吗?我得到 0xe1。
    • 我将代码添加到问题中。再次感谢您的帮助!
    • @user3566150 我更新了我的答案。我在某处读到这可能取决于处理器
    • 那是我的电脑吗?我正在使用 Mac。当我运行您的代码时,它显示“TypeError:ord() 需要一个字符,但找到长度为 2 的字符串”
    【解决方案2】:

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

    如果要将其转换为 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-22
      • 1970-01-01
      • 2021-04-25
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      相关资源
      最近更新 更多