我需要根據自定義替換集替換unicode。自定義替換由其他人的API定義,我基本上只需要處理它。就目前而言,我已經將所有必需的替換提取到一個csv文件中。這裏有一個例子:Python - 讀取unicode替換的csv文件
\u0020,
\u0021,!
\u0023,#
\u0024,$
\u0025,%
\u0026,&
\u0028,(
\u0029,)
\u002a,*
\u002b,+
\u002c,","
\u002d,-
\u002e,.
\u002f,/
\u03ba,kappa
...
我產生這個在MS Excel通過黑客攻擊了Java程序的API所有者使用自己時,他們需要做的轉換(沒有...他們不會只運行轉換器時,該API接收輸入...)。有約1500個替代定義。
當我生成輸出(從我的Django應用程序)發送到他們的API作爲輸入,我想處理替換。下面是我如何一直在努力做到這一點:
class UTF8Converter(object):
def __init__(self):
#create replacement mapper
full_file_path = os.path.join(os.path.dirname(__file__),
CONVERSION_FILE)
with open(full_file_path) as csvfile:
reader = csv.reader(csvfile)
mapping = []
for row in reader:
#remove escape-y slash
mapping.append((row[0], row[1])) # here's the problem
self.mapping = mapping
def replace_UTF8(self, string):
for old, new in self.mapping:
print new
string.replace(old, new)
return string
的問題是,在CSV文件unicode的代碼出現,例如,self.mapping[example][0] = '\\u00e0'
。好的,那是錯的,所以我們試試:
mapping.append((row[0].decode("string_escape"), row[1]))
沒有變化。如何:
mapping.append((row[0].decode("unicode_escape"), row[1]))
好的,現在self.mapping[example][0] = u'\xe0'
。所以是的,這是我需要替換的字符...但是我需要調用replace_UTF8()函數的字符串看起來像u'\u00e0'
。
我也試過row[0].decode("utf-8")
,row[0].encode("utf-8")
,unicode(row[0], "utf-8")
。
我也試過this但我沒有unicode字符在csv文件中,我有unicode代碼點(不知道這是否是正確的術語或什麼)。
那麼,如何將我從csv文件中讀取的字符串轉換爲可與mythingthatneedsconverted.replace(...)一起使用的unicode字符串?
還是...我需要用csv文件做其他事情才能使用更明智的方法嗎?
作爲一個側面說明,爲什麼您使用翻譯的列表,並走在整個列表來調用'每個replace',而不是隻建立一個表['unicode.translate'使用](http://docs.python.org/2.7/library/stdtypes.html#str.translate)? – abarnert
另外,'string.replace(old,new)'只是返回一個新的字符串,它不會以任何方式改變'string'。另外,你不能在Unicode字符串中搜索UTF-8數據,你必須將它解碼爲Unicode,然後在那裏完成這項工作。 – abarnert