2012-09-05 45 views
1

我正在編寫一個腳本,它以多種語言寫入文件,包括沒有ascii文本,因此我正在使用unicode編寫內容。Python:在文件中寫入unicode值

下面是數據的打印:

[['LATEST', u'\u0928\u0935\u0940\u0928\u0924\u092e'], ['RECOMMENDED', u'\u0938\u093f\u092b\u093e\u0930\u093f\u0936 \u0915\u093f\u092f\u093e \u0917\u092f\u093e']] 

這裏是我用來寫代碼:在文本編輯器

f = codecs.open(file,encoding='utf-8', mode='w') 
f.write(el) 

這工作得很好,以有文字出現在印地文但由於服務器預期的文件格式,我需要直接寫出來

\ u0928 \ u0935 \ u0940 \ u0928 \ u0924 \ u0992e \ u012e

我目前正在運行的

os.system("native2ascii -encoding utf-8 ./output/nls_hi.properties ./output/nls_hi.properties") 

但這需要太多的時間,我不禁想,必須有直接寫的正確方法的一種方式。

想法?

感謝

傑森

回答

3

你可能想使用類似my_string.encode('raw_unicode_escape')

好,f = codecs.open('bla.txt', encoding='raw_unicode_escape', mode='w')

那麼該文件將包含轉義字符串:\u0928\u0935\u0940\u0928\u0924\u092e

+0

工作,我查了編碼表,但看了unicode ...並沒有想到看着生...;在掌握文檔之前還有很長的路要走! –

+0

你救我的電梯! – AechoLiu

1

什麼文件格式服務器期望嗎?它是否需要byte-order mark(BOM)?不管答案是什麼,這是最簡單的,只是直接使用str.encode

data = u'text with Unicode chars etc.' 
with open(filename, 'w') as f: 
    # For UTF-8, no BOM: 
    f.write(data.encode('utf-8') 

對於UTF-16,使用data.encode('utf-16'),這將拿出一個BOM。如果您不想要物料清單,請明確使用utf-16le(little-endian)或utf-16be(big-endian)。

+0

我已經嘗試過,但我然後得到「ascii」編解碼器無法解碼位置7字節0xe0:序號不在範圍(128)「然而,user711413的解決方案工作,所以問題解決謝謝 –