Yo *_*iao 4 python python-3.x python-unicode
我在一个文件中给了一串希伯来字符(以及其他一些阿拉伯字符.我都不知道它们)
צוֹר
当我从Python3中的文件加载此字符串时
fin = open("filename")
x = next(fin).strip()
Run Code Online (Sandbox Code Playgroud)
长度x似乎是5
>>> len(x)
5
Run Code Online (Sandbox Code Playgroud)
它的unicode utf-8编码是
>>> x.encode("utf-8")
b'\xd7\xa6\xd7\x95\xd6\xb9\xd7\xa8\xe2\x80\x8e'
Run Code Online (Sandbox Code Playgroud)
但是,在浏览器中,很明显这些希伯来字符的长度为3.
如何正确地获得长度?为什么会发生这种情况?
我知道Python 3默认是unicode所以我没想到会出现这样的问题.
原因是包含的文本包含控制字符\u200e,该控制字符是用作从左到右标记的不可见字符(当您将多种语言混合以在从左到右和从右到左之间划分时常用).另外,它包括元音"字符"(第二个字符上方的小点,表示如何发音).
例如,如果用空字符串替换LTR标记,则长度为4:
>> x = '????'
>> x
'????\u200e' # note the control character escape sequence
>> print(len(x))
5
>> print(len(x.replace('\u200e', ''))
4
Run Code Online (Sandbox Code Playgroud)
如果您只需要严格的字母字符和空格字符的长度,您可以执行类似于re.sub所有非空格非单词字符的操作:
>> print(len(re.sub('[^\w\s]', '', x)))
3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
962 次 |
| 最近记录: |