Python:测试字符串中的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语言)的情况下测试此类

我需要测试已经用str.encode('utf-8')编码的字符串是否从右向左。我试过了

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