Python 包含泰语字符的右对齐字符串
我想右对齐包含泰语字符的字符串(泰语渲染从左到右不起作用,但也可以向上和向下) 例如,对于字符串ไป (两个字符,长度2)和ซื้อ (四个字符,长度2)我希望有以下输出(长度5): 天真的Python 包含泰语字符的右对齐字符串,python,justify,thai,southeast-asian-languages,Python,Justify,Thai,Southeast Asian Languages,我想右对齐包含泰语字符的字符串(泰语渲染从左到右不起作用,但也可以向上和向下) 例如,对于字符串ไป (两个字符,长度2)和ซื้อ (四个字符,长度2)我希望有以下输出(长度5): 天真的 print 'ไป'.decode('utf-8').rjust(5) print 'ซื้อ'.decode('utf-8').rjust(5) 但是,分别产生 ...ไป .ซื้อ 你知道如何获得想要的格式吗 编辑: 给定一个泰语字符tc字符串,我想确定该字符串使用了多少[places/fie
print 'ไป'.decode('utf-8').rjust(5)
print 'ซื้อ'.decode('utf-8').rjust(5)
但是,分别产生
...ไป
.ซื้อ
你知道如何获得想要的格式吗
编辑:
给定一个泰语字符tc字符串,我想确定该字符串使用了多少[places/fields/positions/您想叫它什么]字符。这与len(tc)不同;len(tc)通常大于使用的位置数。第二个单词给出len(tc)=4,但长度为2/使用2个位置/使用2个位置 我想你想问的是,如何判断剧中人物的“真实”เรือ, ไป, ซื้อ 等(分别为3、2和2) 不幸的是,Python是这样解释这些字符的: ไป
>>> 'ไป'
'\xe0\xb9\x84\xe0\xb8\x9b'
>>> len('ไป')
6
>>> len('ไป'.decode('utf-8'))
2
ซื้อ
>>> 'ซื้อ'
'\xe0\xb8\x8b\xe0\xb8\xb7\xe0\xb9\x89\xe0\xb8\xad'
>>> len('ซื้อ')
12
>>> len('ซื้อ'.decode('utf-8'))
4
เรือ
>>> 'เรือ'
'\xe0\xb9\x80\xe0\xb8\xa3\xe0\xb8\xb7\xe0\xb8\xad'
>>> len('เรือ')
12
>>> len('เรือ'.decode('utf-8'))
4
显示的字符数与组成字符串的实际字符数(从Python的角度来看)之间没有真正的相关性
我想不出一个明显的方法来做到这一点。然而,我发现这可能对你有帮助。(您还需要安装一些。我想您想问的是,如何确定เรือ, ไป, ซื้อ 等(分别为3、2和2) 不幸的是,Python是这样解释这些字符的: ไป
>>> 'ไป'
'\xe0\xb9\x84\xe0\xb8\x9b'
>>> len('ไป')
6
>>> len('ไป'.decode('utf-8'))
2
ซื้อ
>>> 'ซื้อ'
'\xe0\xb8\x8b\xe0\xb8\xb7\xe0\xb9\x89\xe0\xb8\xad'
>>> len('ซื้อ')
12
>>> len('ซื้อ'.decode('utf-8'))
4
เรือ
>>> 'เรือ'
'\xe0\xb9\x80\xe0\xb8\xa3\xe0\xb8\xb7\xe0\xb8\xad'
>>> len('เรือ')
12
>>> len('เรือ'.decode('utf-8'))
4
显示的字符数与组成字符串的实际字符数(从Python的角度来看)之间没有真正的相关性
我想不出一个明显的方法来做到这一点。但是,我已经找到了可能对您有帮助的方法。(您还需要安装一些。它看起来像rjust()函数将不适用于您,您需要自己计算字符串中的单元格数。然后,您可以在字符串前插入所需的空格数以实现对齐
你似乎对泰语很了解。把辅音、前元音、后元音和泰语标点符号的数量加起来。不要计算发音符号和上下元音
比如(请原谅我的伪Python代码)
单元格=0
对于范围内的i(0,len(字符串))
如果(string[i]==\xe31)或((string[i]>=\xe34)和(string[i]=\xe47)和(string[i]),rjust()函数似乎不适用于您,您需要自己计算字符串中的单元格数。然后,您可以在字符串之前插入所需的空格数以实现对齐
你似乎对泰语很了解。把辅音、前元音、后元音和泰语标点符号的数量加起来。不要计算发音符号和上下元音
比如(请原谅我的伪Python代码)
单元格=0
对于范围内的i(0,len(字符串))
如果(字符串[i]=\xe31)或((字符串[i]>=\xe34)和(字符串[i]=\xe47)和(字符串[i]原因
泰语脚本包含普通字符(正进位宽度)和非间隔标记(零进位宽度)
例如,在单词ซื้อ代码>:
第一个字符是第一个辅音“SO SO”
然后它有元音标记SARA UUE
然后是音调标记MAI THO
然后是最后一个伪辅音oang
问题是上面列表中的字符##2和3是零宽度字符
换句话说,它们不会使字符串“更宽”。
换句话说,ซื้อ代码>(“购买”)和ซอ代码>(“fiddle”)的两个字符位置的宽度相等(但相应的字符串长度为4和2)
解决方案
为了计算“实际”字符串长度,必须跳过零宽度字符
特定于Python的
该模块提供对Unicode字符数据库(UCD)的访问,该数据库定义所有Unicode字符的字符属性。此数据库中包含的数据是从UCD 8.0.0版编译而来的
unicodedata.category(unichr)
方法一包括以下内容:
“Lo”
表示普通字符
“Mn”
用于零宽度非间距标记
剩下的是显而易见的,只需过滤掉后一种
进一步资料:
- (滚动至第一次出现“泰语字符”)
原因
泰语脚本包含普通字符(正进位宽度)和非间隔标记(零进位宽度)
例如,在单词
ซื้อ代码>:
第一个字符是第一个辅音“SO SO”
然后它有元音标记SARA UUE
然后是音调标记MAI THO
然后是最后一个伪辅音oang
问题是上面列表中的字符##2和3是零宽度字符
换句话说,它们不会使字符串“更宽”。
换句话说,ซื้อ代码>(“购买”)和ซอ代码>(“fiddle”)的两个字符位置的宽度相等(但相应的字符串长度为4和2)
解决方案
为了计算“实际”字符串长度,必须跳过零宽度字符
特定于Python的
该模块提供对Unicode字符数据库(UCD)的访问,该数据库定义所有Unicode字符的字符属性。此数据库中包含的数据是从UCD 8.0.0版编译而来的
unicodedata.category(unichr)
方法一包括以下内容:
<