<p>似乎汉字(和中文)的长度是ascii的两倍。你知道吗</p>
<p>因此,我将使用<code>.encode('ascii')</code>和<code>UnicodeEncodeError</code>来检查一行是否是ascii。(根据这里的答案:<a href="https://stackoverflow.com/a/196391/837627">https://stackoverflow.com/a/196391/837627</a>)</p>
<p>如果是ascii,我们需要在行前面有更多的空格。你知道吗</p>
<p>这里有一个解决方案:</p>
<pre><code>words = ["hhhh", "你你你你你你"]
max_length = 0
# Find the max length string in the array
# For kanji strings, the max length is doubled
for line in words:
line_length = 0
try:
line.encode('ascii')
except UnicodeEncodeError:
line_length = 2 * len(line)
else:
line_length = len(line)
if max_length < line_length:
max_length = line_length
# Find the number of spaces to add by subtracting max line length by length of current line
# If current line is kanji, it is twice a ascii string length
for line in words:
space = 0
try:
line.encode('ascii')
except UnicodeEncodeError:
space = max_length - (len(line)*2)
else:
space = max_length - len(line)
print((' ')*space + line)
</code></pre>
<p>输出:</p>
<pre><code> hhhh
你你你你你你
</code></pre>
<p>第一行是4个ascii字符长。第二行是6个汉字长==12个ascii字符长。所以第一行前面需要<code>12-4=8</code>个空格(MONOSPACE!!!)。它在StackOverflow中看起来不正确,但在terminal中,它将由于单空格字体而对齐。你知道吗</p>
<p>顺便说一句,我用Python3写了这个解决方案。你知道吗</p>