专业网站优化培训,邯郸有学做搭建网站的吗,怎么做弹幕视频网站,wordpress dux商城emoji如何对齐 特殊字符如何对齐 高级文本对齐
问题引出
我们在程序打印输出时#xff0c;如何我们所输出的字符中包含emoji文本#xff0c;或者其它特殊的字符文本#xff0c;则我们的打印对齐效果将出现错位。以下代码复现了这一效果#xff08;tips#xff1a; 马老师…emoji如何对齐 特殊字符如何对齐 高级文本对齐
问题引出
我们在程序打印输出时如何我们所输出的字符中包含emoji文本或者其它特殊的字符文本则我们的打印对齐效果将出现错位。以下代码复现了这一效果tips 马老师 前面的 符号是为了观察对齐效果
# -*- coding:UTF-8 -*-# region 引入必要依赖
from DebugInfo.DebugInfo import *# endregionif __name__ __main__:画板 打印模板()画板.打印空行(2)画板.准备表格()画板.添加一行(序号, 姓名, 自评, 班主任).修饰行(青字) # 作为标题行画板.添加一行(1, 小红, 我很开朗, |马老师)画板.添加分隔行()画板.添加一行(2, 猪小明, 我得了很多小花 ❌, |马老师)画板.添加分隔行()画板.添加一行(3, 赵虹, 我有爱心♥, |马老师)画板.添加分隔行()画板.添加一行(4, 张天志, 我是女生♀️我有长头发, |马老师)画板.添加空行()画板.展示表格()以上代码的运行打印对齐如下 我们可以观察到猪小明行马老师靠前了 我们又可以观察到张天志行马老师靠后了
原因解释
为什么会出现上面的对齐的现象呢这就要从字体说起了。 我们电脑上所显示的符号肯定是通过某一个字体来显示的。所以同一个字我们在宋体下看到的效果和在黑体下看到的效果是不一样的。
一个字符显示其效果所占用的屏幕像素数量称为字符的显示像素宽度为方便其见我们将字符的像素宽度相对于英文字符空格所占用的像素宽度的比值做为下文我们要描述的字符显示宽度值。
显然英文空格的字符显示宽度值是 1一个英文字符大写和小写的显示宽度值是 1对于以下显示的楷体字体下的中文一个字符的显示宽度值是 2
显示对于任何可以在电脑上显示的字符其都有一个显示宽度只是不同的字符在不同的字体下其显示宽度值不同罢了。
有了以上规律后我们如果需要对齐文本就会比较容易了。我们计算字符的显示宽度根据其显示宽度计算并补充对应数量的空格后文本就可以达到对齐的效果。
那现在来说上面马老师对不齐的问题。根据上文中的对齐原理的解释马老师对不齐肯定是文本中存在了这样的字符这字符计算的显示宽度与其实际显示所占用的宽度不一致导致在补充空格时空格数量计算错误。
找出真凶
在上面的表格中我们发现符号 ❌ ♥ ♀️ 是不常的字符。我们把这几个字符拿掉再来观察对齐效果如下
# -*- coding:UTF-8 -*-# region 引入必要依赖
from DebugInfo.DebugInfo import *# endregionif __name__ __main__:画板 打印模板()画板.打印空行(2)画板.准备表格()画板.添加一行(序号, 姓名, 自评, 班主任).修饰行(青字) # 作为标题行画板.添加一行(1, 小红, 我很开朗, |马老师)画板.添加分隔行()# 画板.添加一行(2, 猪小明, 我得了很多小花 ❌, |马老师)画板.添加一行(2, 猪小明, 我得了很多小花 , |马老师)画板.添加分隔行()# 画板.添加一行(3, 赵虹, 我有爱心♥, |马老师)画板.添加一行(3, 赵虹, 我有爱心, |马老师)画板.添加分隔行()# 画板.添加一行(4, 张天志, 我是女生♀️我有长头发, |马老师)画板.添加一行(4, 张天志, 我是女生我有长头发, |马老师)画板.添加空行()画板.展示表格()以上代码运行效果如下 嗯对齐效果非常漂亮。 所以我们将问题的焦点放在符号 ❌ ❤ ♀️ 这三个字符上。 以下代码打印并显示了这三个字符的显示宽度和实际占用宽度。
# -*- coding:UTF-8 -*-# region 引入必要依赖
from DebugInfo.DebugInfo import *# endregionif __name__ __main__:画板 打印模板()画板.打印空行(2)画板.准备表格()画板.添加一行(字符,显示宽度值).修饰行(青字)画板.添加分隔行()画板.添加一行(❌|,显示宽度(❌))画板.添加一行(♥|,显示宽度(♥))画板.添加一行(♀️|,显示宽度(♀️))画板.添加空行()画板.展示表格()
以上代码运行效果如下 上图我们可以看到注意看参考符号 的位置
字符 ❌ 显示占用宽度为1 计算的显示宽度是2 这将导致在对齐补空格时少补一个空格字符 ♥ 显示占用宽度为1计算的显示宽度也是1 实际显示宽度和计算显示宽度一致对齐补齐空格正常字符 ♀️ 显示占用宽度为2但计算的显示宽度为1 这将导致在对齐补空格时多补一个空格
所以对齐出错的根本原因在于符号 ♥ 和 ♀️ 在终端显示时显示这两个字符所占用的字符宽度与计算的字符宽度不一致导致在计算对齐补空格时补了错误数量的空格。
补救措施
有了以上的分析我们知道了出现对齐错位的根本原因在于部分特殊的字符显示宽度值的计算与实际不符导致那么我们对应的解决方案也就明朗了修正特殊字符的显示宽度值
如下的代码我们指定了特殊字符的显示宽度值并将其告诉了【打印模板对象】这里是画板然后我们又打印显示了带有特殊字符的文本观察其对齐效果
# -*- coding:UTF-8 -*-# region 引入必要依赖
from DebugInfo.DebugInfo import *# endregionif __name__ __main__:画板 打印模板()画板.打印空行(2)画板.准备表格()画板.设置特殊字符宽度字典({❌: 1, ♀: 2}) # 修正特殊符号的显示宽度值画板.添加一行(序号, 姓名, 自评, 班主任).修饰行(青字) # 作为标题行画板.添加一行(1, 小红, 我很开朗, |马老师)画板.添加一行(2, 猪小明, 我得了很多小花❌, |马老师)画板.添加一行(3, 赵虹, 我有爱心♥, |马老师)画板.添加一行(4, 张天志, 我是女生♀️我有长头发, |马老师)画板.添加空行()画板.展示表格()
上面的代码中请留意 设置特殊字符宽度字典 方法其修正了符号 ❌和 ♀️ 的显示宽度值这帮助程序正确的理解和计算了字符的实际显示宽度从而在对齐补齐空格时可以补齐正确数量的空格。 其它的坑
在以上的分析过程中我们所提到所有在电脑上显示处理的符号都依赖于字体这也就是说在不同的字体下同一个符号可能显示的宽度相对于空格或者符号 -是有可能不同的现观察到的部分字体中英文字符的宽度如果计算为单位1中文字符的宽度是1.5在这种非整数倍的字体下遇到中英文混合情况时对齐处理是非常难的甚至是无法做到的。
对于特殊字符同样在不同的字体下其显示宽度也是不同的在实际的应用中要多加留意处理。
另外为了方便文本对齐的计算大家在实际使用时需要注意终端所使用的字体是否是等宽字体非等宽字体下可能出现字体宽度不是整数的情况对齐处理效果会受到影响。
小结
非常感谢大家的关注和阅读如果哪里有些的不对的地方望批评指出以便及时修正。 。
对于特殊字符同样在不同的字体下其显示宽度也是不同的在实际的应用中要多加留意处理。
另外为了方便文本对齐的计算大家在实际使用时需要注意终端所使用的字体是否是等宽字体非等宽字体下可能出现字体宽度不是整数的情况对齐处理效果会受到影响。
小结
非常感谢大家的关注和阅读如果哪里有些的不对的地方望批评指出以便及时修正。