【问题标题】:Compare Unicode code point range in Python3比较 Python3 中的 Unicode 代码点范围
【发布时间】:2021-09-24 01:20:31
【问题描述】:

我想检查一个字符是否在某个 Unicode 范围内,但似乎我无法得到预期的答案。

char = "?" # the unicode value is 0xff1f
print(hex(ord(char)))
if hex(ord(char)) in range(0xff01, 0xff60):
    print("in range")
else:
    print("not in range")

它应该打印:“在范围内”,但结果显示:“不在范围内”。我做错了什么?

【问题讨论】:

    标签: python-3.x unicode


    【解决方案1】:

    hex() 返回一个字符串。要比较整数,您只需使用 ord:

    if ord(char) in range(0xff01, 0xff60):
    

    你也可以写:

    if 0xff01 <= ord(char) < 0xff60:
    

    【讨论】:

      【解决方案2】:

      一般对于此类问题,您可以尝试检查变量的类型。

      输入 0xff01 不带引号,代表一个数字。

      list(range(0xff01, 0xff60)) 会给你一个整数列表[65281, 65282, .., 65375]range(0xff01, 0xff60) == range(65281, 65376) 计算结果为 True

      ord('?') 给你整数65311

      hex() 接受一个整数并将其转换为'0xff01'(一个字符串)。

      所以,你只需要使用ord(),不需要hex()

      【讨论】:

        【解决方案3】:

        只使用ord:

        if ord(char) in range(0xff01, 0xff60):
            ...
        

        hex 不需要。

        docs中提到的:

        将整数转换为以“0x”为前缀的小写十六进制字符串。

        显然已经描述过了,它变成了一个字符串而不是我们想要的整数。

        ord 函数可以满足我们的需求,正如docs 中所述:

        给定一个表示一个 Unicode 字符的字符串,返回一个表示该字符的 Unicode 代码点的整数。例如,ord('a') 返回整数 97ord('€')(欧元符号)返回 8364。这是chr() 的倒数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-04
          • 2018-03-12
          • 1970-01-01
          • 2018-05-10
          • 2010-09-13
          相关资源
          最近更新 更多