【问题标题】:Finding the width of the emoji using python3使用python3查找表情符号的宽度
【发布时间】:2020-12-04 05:37:23
【问题描述】:

我尝试在 python 中使用模式打印字母“A”

def printA(length,height,symbol):
    a = [[" " for i in range(length)] for i in range(height)]
    for i in range(height):
        for j in range(length):
            if j == 0 or i == 0 or i == height // 2 or j == length - 1:a[i][j] = symbol
    return a

它适用于像*,/+,-,#,$,% .. etc.,这样的普通字符

输出: 普通字符

#######
#     #
#     #
#######
#     #
#     #
#     #

表情符号

????????????????????????????
????     ????
????     ????
????????????????????????????
????     ????
????     ????
????     ????

如果我能找到表情符号的长度,那么我将能够将空格更改为表情符号的长度,这样就不会出现这个问题,有什么办法可以做到这一点

注意:以上代码仅适用于字符,不适用于字符串

编辑:
截至snakecharmerb's 回答它仅适用于打印字符A 但是当我尝试打印A 的序列时,即不止一次它只是放错了表情符号

示例:我尝试打印AAAAA

输出:

根据上面的输出,当我们增加字母的位置时,它会自行重新定位,有什么办法可以防止这种情况发生

我像这样打印了AAAAA

a = printA(7,7,"????")
for i in a:
    for k in range(5):print(*(i),end="  ")
    print()

【问题讨论】:

  • 看看这两个响应是否给了你想要的。 stackoverflow.com/questions/43146528/…stackoverflow.com/questions/36216665/…。您应该能够使用 len("????".encode("utf-8")) 来检查长度
  • 我不认为你的代码只有表情符号有问题。尝试使用printA(5,6,"##") 运行代码,您会发现它的打印效果与表情符号相似。您需要以不同的方式修复代码。
  • @JoeFerndz 我提到了字符而不是字符串符号必须是字符而不是字符组合

标签: python python-3.x unicode emoji


【解决方案1】:

重要的是显示字符的字体中字形的宽度,而不是作为 Python 字符串的字符长度。此信息不适用于 Python,但我们可以根据 symbol 是否为 wide East Asian character 来猜测,正如 unicodedata 模块报告的 unicode 标准所定义的那样。

import unicodedata 


def printA(length, height, symbol):  
    # Two spaces for "wide" characters, one space for others.
    spacer = '  ' if unicodedata.east_asian_width(symbol) == 'W' else ' ' 
    a = [[spacer for i in range(length)] for i in range(height)]  
    for i in range(height): 
        for j in range(length): 
            if j == 0 or i == 0 or i == height // 2 or j == length - 1:
                a[i][j] = symbol  
    return a

使用东亚宽度属性有效,因为

表情符号字符最初是通过使用传统东亚编码(如 Shift-JIS)的扩展来开发的,在这种情况下,它们被视为宽字符。虽然这些扩展已添加到 Unicode 或映射到标准化的变体序列,但仍保留了它们作为宽字符的处理方式,并对其进行了扩展以与缺乏传统编码的表情符号字符保持一致。

(link)

您可能还需要检查您的终端是否使用等宽字体。

另请参阅this Q&A,了解有关在终端中将文本与不同字符宽度属性对齐的一些问题,以及thisthis

【讨论】:

    【解决方案2】:

    您可以使用以下方法检查长度。

    len("?".encode("utf-8"))
    

    更多信息可以在这两个堆栈溢出响应中找到。

    Find there is an emoji in a string in python3

    How to extract all the emojis from text?

    除了计算表情符号的长度,你不能这样做吗?

    a = [[" "*len(symbol) for i in range(length)] for i in range(height)]
    

    【讨论】:

      猜你喜欢
      • 2016-12-11
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      • 2020-07-27
      • 2017-05-09
      • 2017-06-13
      • 1970-01-01
      相关资源
      最近更新 更多