【问题标题】:Print characters for integer in any arbitrary encoding以任意编码打印整数的字符
【发布时间】:2014-01-02 19:57:10
【问题描述】:

如何为任意编码执行与chr() 函数等效的函数?考虑一下这个尝试(不起作用):

for i in range(128, 255):
    print("%s " % (i.encode('cp1252'),) )

AttributeError: 'int' object has no attribute 'encode' 失败。

这种尝试也不起作用:

for i in range(128, 255):
    j = "\x%x " % (i,)
    print("%x " % (j.encode('cp1252'),) )

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-2: truncated \xXX escape 失败。

我专门针对 Python 3。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    在 Python 3 中,我相信你想要这个,

    chr(i).encode('cp1252')
    

    或者在 Python 2.x 中,您会使用,

    unichr(i).encode('cp1252')
    

    完整的代码是,

    for i in range(128, 255):
        print("%s " % (unichr(i).encode('cp1252',errors='replace')))
    

    在我的控制台上,cp1252 编码不起作用并引发异常。要至少打印一个十六进制值,您可以包含errors 部分。

    这篇文章是相关的:Python 3: Demystifying encode and decode methodsHow to print non-ascii characters to file in Python 2.7

    【讨论】:

    • 3.3 也不行。
    • 我当然试过了。当你说“不工作”时,你能更具体一点吗?
    • 循环遍历range(128, 255) 会在第一个字符中抛出UnicodeDecodeError
    【解决方案2】:

    您到底想达到什么目的?第二次尝试归结为:

    for i in range(128, 255):
        j = chr(i)
        print("%x " % (j.encode('cp1252'),) )
    

    但我不明白这与 cp1252 的 chr 是如何等效的。 chr(i) 从代码页中的位置i 转换为对应的字符(返回值为长度为 1 的 unicode 字符串)。您可以使用 cp1252 (或任何其他编码)进行类似的转换 bytes([i]).decode('cp1252'),这看起来更像是你的第一次尝试。

    【讨论】:

    • 我必须解码 j 并将其打印为字符串,但这有效。 print("%s " % (j.encode('cp1252').decode('cp1252'), ))。另请注意,代码点 128-159 不起作用,我必须从 160 开始。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 2020-04-20
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多