簡體   English   中英

如何在Python中將unicode對象寫入文件?

[英]How to write a unicode object into a file in Python?

我嘗試將“字符串”寫入文件並得到以下錯誤消息:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xcd' in position 6: ordinal not in range(128)

我嘗試了以下方法:

print >>f, txt
print >>f, txt.decode('utf-8')
print >>f, txt.encode('utf-8')

他們都不工作。 我有同樣的錯誤信息。

編碼和解碼背后的想法是什么? 如果我有一個unicode對象,可以直接將其寫入文件中還是需要將其轉換為字符串?

我如何找出使用了什么編碼? 我怎么知道它是utf-8還是ascii或其他?

添加

我想我剛剛設法將字符串保存到文件中。 print >>f, txt以及print >>f, txt.decode('utf-8')不起作用,但是print >>f, txt.encode('utf-8')起作用。 我沒有收到錯誤消息,並且在文件中看到了中文字符。

我最近發布了另一個解決此問題的答案 關鍵語錄:

為了更好地了解它們之間的區別,請閱讀Joel的文章之一 ,但要點是字節是字節(8位的組,沒有附加任何其他含義),而字符是組成文本字符串的東西。 編碼將字符轉換成字節,而解碼將字節轉換成字符。

在Python 2中, unicode對象是字符串。 常規str對象可以是字符串或字節字符串。 (專業提示:使用Python 3,使跟蹤變得容易得多。)

你應該通過字符串 (不是字節字符串)來print ,但你必須確保這些字符串可以通過編解碼器進行編碼(如ASCII或UTF-8)與目標文件對象關聯f 作為輸出過程的一部分,Python會為您編碼字符串。 如果該字符串包含文件對象的編解碼器無法編碼的字符,則會出現類似您所看到的錯誤。

不知道您的txt對象中有什么,我無法更具體地說明。

我認為您需要使用編解碼器庫:

import codecs

file = codecs.open("test.txt", "w", "utf-8")
file.write(u'\xcd')
file.close()

工作正常。

編碼/解碼的故事:

過去,計算機中大約只有60個字符(包括大寫和小寫字母+數字+一些特殊字符)。 因此,只有1個字節足以為每個字母分配一個唯一的數字。 將數字分配給要存儲在內存中的字母稱為編碼。 默認情況下,在python中使用的這一一字節編碼稱為ASCII

隨着世界計算機的發展,我們需要在計算機中增加字母和字符。 因此1個字節是不夠的。 出現了不同的編碼方案。 Unicode是著名的之一。 您要存儲在文件中的字符是Unicode字符,需要2個字節,因此您必須向Python明確表示您不想使用默認編碼,即ASCII(因為您需要2個字節用於此字符)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM