在Python字符串中查找UTF-8字符的索引

问题描述:

我试图在UTF-8编码的字符串中使用外语(例如字符:ش)查找某个字符的索引(或多个索引)。在Python字符串中查找UTF-8字符的索引

我试过unicode.find('ش'),word.find(u'ش'),word.find(u'\\uش')也正则表达式:re.compile(u'\\uش)无济于事。有趣的是,在Visual Studio(我的IDE使用IronPython)处于调试模式下,word.find(u'\\uش')在变量监视窗口中返回正确的索引,但它不在实际代码中(返回index=-1)。

file= codecs.open(file,'r','utf-8') 

有我丢失的东西:

我使用下面的命令读取该文件中的字符串?还是有另一种方法来解决这个问题?

+0

如何搜索'u'\ u1588''?这可能是源代码中的编码问题。 –

+1

使用'x.find(“ش”)'(其中'x'是一个unicode对象)适用于我。如果将字符输入到解释器(或脚本)中,则可能是控制台/文件编码设置不正确,因此,将“ش”粘贴到的字节不是该字节字符。您可以尝试通过编码点号码或文件编码来查找字符。 – BrenBarn

+0

如何检查脚本编码并将其更改为UTF-8? –

一旦你使用codecs来读取文件,它不再是UTF-8,它是一个内部的Unicode字符串表示。这应该与程序中的Unicode文字完全兼容。

>>> line=u'abcش' 
>>> line.find(u'ش') 
3 

编辑:我以前的测试可能是误导,因为这两种丝线通过IDE输入。这里有一个更好的例子:

>>> f = codecs.open(r'c:\temp\temp.txt', 'r', 'utf-8-sig') 
>>> line = f.readline() 
>>> print line 
This is a test.ش 

>>> line.find(u'\u0634') 
15 
+0

感谢您的回答。它仍然不适合我。我在Windows下工作,所以它可能是编码不一致?我尝试在Red Hat上运行相同的程序,但我仍然不喜欢 –

+0

@poeticcrayons,肯定会出现编码不一致的情况,这就是为什么我的第二个示例使用'u'\ u0634'' - 它不受编码问题的影响。我在问题的评论中看到你正在尝试'u'\ u1588''这是错误的字符。 –