2017-08-01 63 views
1

在我的項目中,我需要處理許多不同的語言,其中之一是日語。 (我自己不說)。使用不同的UTF-8編碼測試視覺相同的字符的相等性。 (日語)

我需要比較兩個字符串,看看它們是否相等。一個字符串來自我的計算機上的文件名,另一個字符串來自該確切文件的下載鏈接。這兩個字符串應該是相同的。

原來相同的字符可以用不同的方式編碼或類似的東西。

看看字符,它可以用兩種方式編碼。

  1. \xe3\x83\x90
  2. \xe3\x83\x8f\xe3\x82\x99

數2實際上是一種一起,這導致在相同的字符。正因爲如此,有些字符串會被認爲是不同的,即使它們應該是平等的。 Python是告訴我,

ネバーランド

是不一樣的

ネバーランド

事情我已經嘗試:

  • 而不是檢查確切的平等我嘗試使用相似性:

    difflib.SequenceMatcher(None, string1, string2).ratio()這不幸的是不夠精確。我也嘗試過配置垃圾,但我無法做到足夠精確。

  • 亂七八糟的解碼和編碼功能,希望它只會神奇消失。

我見過有些類似的問題,但沒有好的解決方案,恐怕沒有,除非我手動過濾掉這些特殊情況。

回答

0

標準化爲其組合形式。但是,使用unicode,當然不是UTF-8。

>>> u'ネバーランド' == u'ネバーランド' 
False 
>>> unicodedata.normalize('NFC', u'ネバーランド') == u'ネバーランド' 
True 
相關問題