2012-11-29 97 views
1

我試圖在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? –

回答

1

一旦你使用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''這是錯誤的字符。 –