打印完整的 ascii 艺术

Posted

技术标签:

【中文标题】打印完整的 ascii 艺术【英文标题】:Print full ascii art 【发布时间】:2014-06-30 15:46:17 【问题描述】:

我正在尝试像这样打印 ascii 艺术:

print(("""\

                                       ._ o o
                                       \_`-)|_
                                    ,""       \ 
                                  ,"  ## |   ಠ ಠ. 
                                ," ##   ,-\__    `.
                              ,"       /     `--._;)
                            ,"     ## /
                          ,"   ##    /


                    """).encode('utf-8'))

而且输出看起来完全不正确。

打印ascii艺术的正确方法是什么?

【问题讨论】:

使用换行符? \n 这是什么 Python 版本? 我使用的是 Python 3.4。 输出是什么样子的? 使用 PyPi 的 python ASCII 艺术 - 链接 pypi.org/project/art/">here</a>。(没有足够的声誉来评论,除非回复。) 【参考方案1】:
print(r"""\

                               ._ o o
                               \_`-)|_
                            ,""       \ 
                          ,"  ## |   ಠ ಠ. 
                        ," ##   ,-\__    `.
                      ,"       /     `--._;)
                    ,"     ## /
                  ,"   ##    /


            """)

这将以原始文本输入或打印出来

【讨论】:

【参考方案2】:
print(r"""\

                               ._ o o
                               \_`-)|_
                            ,""       \ 
                          ,"  ## |   ಠ ಠ. 
                        ," ##   ,-\__    `.
                      ,"       /     `--._;)
                    ,"     ## /
                  ,"   ##    /


            """)
print(r"""\

                               ._ o o
                               \_`-)|_
                            ,""       \ 
                          ,"  ## |   ಠ ಠ. 
                        ," ##   ,-\__    `.
                      ,"       /     `--._;)
                    ,"     ## /
                  ,"   ##    /


            """)

【讨论】:

【参考方案3】:

不用加''.encode('utf-8')

我一直在 Ubuntu 机器上使用 Python 3.6.7 打印 ASCCII 艺术作品
__header__ = '''Content-Type: application/xml

\033[92m        .---------------------------------.
\033[92m        |  .---------------------------.  |
\033[92m        |[]|\033[94m         __   __   *       \033[92m|[]|
\033[92m        |  |\033[94m        /  | /  | /        \033[92m|  |
\033[92m        |  |\033[94m       (___|(___|(         \033[92m|  |
\033[92m        |  |\033[94m       |   )|    |         \033[92m|  |
\033[92m        |  |\033[94m       |  / |    |         \033[92m|  |
\033[92m        |  |\033[94m /              |         |\033[92m|  |
\033[92m        |  |\033[94m(  ___  ___  ___| ___  ___|\033[92m|  |
\033[92m        |  |\033[94m| |   )|   )|   )|___)|   )\033[92m|  |
\033[92m        |  |\033[94m| |__/ |__/||__/ |__  |__/ \033[92m|  |
..And more

那么

print(__header__)

结果

【讨论】:

【参考方案4】:
print(r"""\

                                   ._ o o
                                   \_`-)|_
                                ,""       \ 
                              ,"  ## |   ಠ ಠ. 
                            ," ##   ,-\__    `.
                          ,"       /     `--._;)
                        ,"     ## /
                      ,"   ##    /


                """)

r 可以让您更好地打印原始文本,尤其是当您尝试打印的图片中有很多引号时。

【讨论】:

我建议这是公认的答案。【参考方案5】:

我得到“......编解码器无法在位置编码字符'\u0ca0'......”

如果 print(giraffe) 由于不正确的字符编码而失败,请尝试正确设置 PYTHONIOENCODING 环境变量,例如在 bash 中:

$ PYTHONIOENCODING=utf-8 python3 -c 'from text_art import giraffe as s; print(s)'

不要使用print(giraffe.encode('utf-8')):

print() 函数需要文本,而不是字节(无关:要打印字节,您可以使用 sys.stdout.buffer.write(some_bytes)) 如何将字节解释为文本是终端的属性,您不应在代码中对其设置进行硬编码。 PYTHONIOENCODING 允许您在必要时更改编码

【讨论】:

【参考方案6】:

encode 接受一个字符串并将其编码为字节。这不是你想要的。您只想直接打印字符串:

print("""\

                                       ._ o o
                                       \_`-)|_
                                    ,""       \ 
                                  ,"  ## |   ಠ ಠ. 
                                ," ##   ,-\__    `.
                              ,"       /     `--._;)
                            ,"     ## /
                          ,"   ##    /


                    """)

如果这不起作用,您的终端很可能未配置为显示 Unicode。不幸的是,我对终端配置不是特别了解; Why doesn't my terminal output unicode characters properly? 可能是相关的,但我的帮助能力主要限于 Python 方面。

【讨论】:

@frostnational: I've tried it, and it seems to work just fine. 我得到“...编解码器无法在位置编码字符'\u0ca0'...” @frostnational 没有损坏,只是您的 IDE 无法打印这些字符。结论,您不能将它们用于 ascii 艺术!

以上是关于打印完整的 ascii 艺术的主要内容,如果未能解决你的问题,请参考以下文章

如何在JTextArea中设置文本格式

ASCII码中哪些是不可打印字符?

ASCII码中哪些是不可打印字符

在ASCII码字符编码中,啥字符无法显示或打印出来

ASCII码

ASCII 码表对照