【问题标题】:Create raw unicode character from hex string representation/enter single backslash从十六进制字符串表示创建原始 unicode 字符/输入单个反斜杠
【发布时间】:2019-10-08 04:31:54
【问题描述】:

我想从字符串十六进制表示创建一个原始 unicode 字符。也就是说,我有一个字符串 s = '\u0222' 这将是 'Ȣ' 字符。

现在,如果我这样做的话,这会起作用

>>> s = '\u0222'
>>> print(s)
'Ȣ'

但是,如果我尝试进行连接,它会出现

>>> h = '0222'
>>> s = r'\u' + '0222'
>>> print(s)
\u0222
>>> s
'\\u0222'

因为可以看出,字符串中的实际内容是 '\\u' 而不是 '\u'。如何从十六进制字符串创建 unicode 字符,或者如何输入真正的单个反斜杠?

【问题讨论】:

    标签: python python-3.x string unicode backslash


    【解决方案1】:

    这比我最初预期的要难解决:

    code = '0222'
    uni_code = r'\u' + code
    s = uni_code.encode().decode('unicode_escape')
    print(s)
    

    或者

    code = b'0222'
    uni_code = b'\u' + code
    s = uni_code.decode('unicode_escape')
    print(s)
    

    【讨论】:

    • 同意,比看起来要难得多。在我测试的时候你打败了我!对于OP,更多细节和示例可以在this answer中找到
    • 这更难,因为构建 Unicode 转义常量并不是最直接的途径。请参阅chr() 函数。
    【解决方案2】:

    输入\u0222 仅适用于字符串常量,Python 解释器会为该语法生成​​单个 Unicode 代码点。它并不意味着手动构建。 chr() 函数用于生成 Unicode 代码点。以下适用于字符串或整数:

    >>> chr(int('0222',16)) # convert string to int base 16
    'Ȣ'
    >>> chr(0x222)          # or just pass an integer.
    'Ȣ'
    

    仅供参考ord() 是互补功能:

    >>> hex(ord('Ȣ'))
    '0x222'
    

    【讨论】:

    • 更好的答案。我想有什么东西可以做到这一点,但我不知道它是什么。
    猜你喜欢
    • 2021-06-26
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多