【问题标题】:Printing characters that are not in ASCII 0-127 (Python 3)打印非 ASCII 0-127 中的字符(Python 3)
【发布时间】:2020-05-05 00:12:24
【问题描述】:

所以,我有一个算法,我获取一个字符,获取其字符代码,将该代码增加一个变量,然后打印该新字符。但是,我也希望它适用于不在默认 ASCII 表中的字符。目前它没有打印像 这样的“特殊”字符(例如)。如何让它打印某些特殊字符?

#!/usr/bin/python3
# -*- coding: utf-8 -*-

def generateKey(name):

    i = 0
    result = ""

    for char in name:

        newOrd = ord(char) + i
        newChar = chr(newOrd)
        print(newChar)

        result += newChar

        i += 1

    print("Serial key for name: ", result)

generateKey(input("Enter name: "))

每当我输入强制使用特殊字符(如|||||)时,前四个字符(包括提供透明矩形图标的DEL)都可以正常工作,但第五个字符(意味着@ 987654325@) 也是一个错误字符,这不是我想要的。我该如何解决这个问题?

这是||||| 的输出:

Enter name: |||||
|
}
~


Serial key for name:  |}~

但最后一个字符应该是,而不是空白。 (顺便说一句,当我将第四个字符 DEL 复制到 Windows 时,它变成了一个透明矩形)

【问题讨论】:

  • 不,实际上不是打印。忘记输出了,抱歉。
  • 编辑了@MarkRansom,有帮助吗?
  • 这样更好,对问题的描述更完整。我不知道这是否足以解决它。如果您打印repr(result),您会得到什么?也许您的控制台无法处理该字符或使用缺少它的字体。

标签: python string ascii non-ascii-characters


【解决方案1】:

在默认编码 (utf-8) 中,chr(128) 不是欧元符号。这是一个控制角色。见this Unicode table。所以确实应该是空白的,而不是

您可以使用sys.getdefaultencoding() 验证默认编码。

如果您想将chr(128) 重新解释为欧元符号,您应该使用windows-1252 编码。在那里,它确实是欧元的象征。 (不同的编码在如何表示 ASCII 的 0-127 之外的值方面存在分歧。)

【讨论】:

  • 有在线参考确实声称 U+0100 是欧元符号。 Unicode 的前 256 个代码点使用 Latin-1 字符集,而 windows-1252 是它的超集。
  • 谢谢!没看懂是windows风格的编码(程序在windows中运行)
  • 即使是 latin1,it's a control character。下面,它说 Windows-1252 将这些重新分配给可打印的字符。
  • 我希望我知道在哪里可以找到 Unicode 代码点的官方列表,因为网络上的代码点不一致。甚至没有就 ISO-8859-1 中的内容达成一致。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2021-05-21
  • 1970-01-01
  • 2013-11-19
  • 2015-09-14
  • 2019-07-02
相关资源
最近更新 更多