首先,我使用 Python 3字形库来解决我的问题。(有关字素的更多信息,请参阅这篇文章)。但令我惊讶的是,如果没有专门的库,Python 3 就无法做到这一点……
我求助于字素是因为在多次网络搜索和阅读StackOverflow问题之后,我无法让 Python 3在一系列泰语字符中返回正确数量的字符位置。
例如,这是一个 UTF-8 泰语字符串:
thai_str = 'สีโชคดีเป็นสีชมพู สีโชคร้ายเป็นสีเหลืองและขาว'
我使用术语字符位置来标识一行/字符串泰语字符中的单个位置。这是因为一个字符位置可能由一个泰语辅音加上,在某些情况下,该辅音上方或下方的元音或声调标记组成。辅音加上元音或音调标记上方/下方占据 Unicode 字符串中的单个字符位置。(一些泰语辅音也可能在其左侧、右侧或两者都有元音。这些元音占据它们自己的字符位置。)
例如,在从示例字符串生成的以下序列中,项目 2 和 7 是元音,项目 10 是音调标记。每个都使用 UTF-8 字符串中的单独字节,但不占用自己的字符位置。第 3 项和第 8 项是位于辅音左侧的元音,因此占据字符位置。
01: ส
02: ี
03: โ
04: ช
05: ค
06: ด
07: ี
08: เ
09: ป
10: ็
...
45: ว
当试图确定示例字符串中的字符位置时,len(thai_str)
返回45
. 这是不正确的。我能够获得正确数量的字符位置的唯一方法是grapheme.length(thai_str)
使用35
.
我还使用 编码来获得以下信息:
b'\xe0\xb8\xaa\xe0\xb8\xb5\xe0\xb9\x82\xe0\xb8\x8a\xe0\xb8\x84\xe0\xb8\x94...
(计算xe0
似乎在每个泰语字符之前出现的实例并不像正确的方法......)
所以 - 在我的示例字符串中计算字符位置的唯一方法是使用 Python 3 库,例如grapheme吗?