Python:测试字符串中的utf-8字符
我需要测试已经用str.encode('utf-8')编码的字符串是否从右向左。我试过了Python:测试字符串中的utf-8字符,python,unicode,right-to-left,Python,Unicode,Right To Left,我需要测试已经用str.encode('utf-8')编码的字符串是否从右向左。我试过了 if u'\u200f' in str.decode('utf-8'): print 'found it' 它既不抱怨也不起作用 问:测试字符串中单个非ASCII字符出现的正确语法是什么?Python2.6和我不能使用3 问:我记得读到过,即使没有显式RML,主要是从右向左的字符也默认为RTL。是否有人知道在不知道应该使用哪种语言(即字符串可以是阿拉伯语、希伯来语或任何其他RTL语言)的情况下测试此类
if u'\u200f' in str.decode('utf-8'):
print 'found it'
它既不抱怨也不起作用
问:测试字符串中单个非ASCII字符出现的正确语法是什么?Python2.6和我不能使用3
问:我记得读到过,即使没有显式RML,主要是从右向左的字符也默认为RTL。是否有人知道在不知道应该使用哪种语言(即字符串可以是阿拉伯语、希伯来语或任何其他RTL语言)的情况下测试此类字符串的方法
感谢所有帮助。每个unicode字符都有一个“双向”类。您可以使用找到双向类。 函数返回一个字符串,例如“L”、“R”、“AL”等,带有: 例如:
In [3]: import unicodedata as UD
In [5]: UD.bidirectional(u'\u0688')
Out[5]: 'AL'
In [6]: UD.bidirectional(u'\u200f')
Out[6]: 'R'
In [7]: UD.bidirectional(u'H')
Out[7]: 'L'
因此,您可以通过确定字符串是否主要由双向类为
R
或AL
的字符组成来猜测字符串是否从右向左
比如说,
# coding: utf-8
import unicodedata as UD
texts = ['ڈوگرى'.decode('utf-8'),
u'Hello']
for text in texts:
x = len([None for ch in text if UD.bidirectional(ch) in ('R', 'AL')])/float(len(text))
print('{t} => {c}'.format(t=text.encode('utf-8'), c='RTL' if x>0.5 else 'LTR'))
屈服
ڈوگرى => RTL
Hello => LTR
关于第一个问题: 问:测试单个事件发生的正确语法是什么 字符串中的非ASCII字符?Python2.6和我不能使用3 您用于测试字符是否为
unicode
格式的方法是正确的。如果str.decode('utf-8')中的u'\u200f'既不抱怨也不起作用,那么u'\u200f'
不在unicode
中,在脚本的第二行添加了“#coding=utf-8”,我可以确认此解决方案工作正常。对不起,我不能投赞成票;我没有足够的声誉。
ڈوگرى => RTL
Hello => LTR