2016-12-06 74 views
-2

I had a problemUTF-8支持的字符(\ufffd)寫入文本文件。我想知道最具包容性的字符集Python 3.x支持將字符串數據寫入文件。哪些字符編碼Python 3.x支持文件I/O?

我能夠通過

valEncoded =(origVal.encode(編碼= 'ASCII',誤差= '替換'))來克服該問題。解碼()

這基本上從origVal中篩選出非ASCII字符。但是我認爲Python文件I/O應該支持比ASCII更多的保護。所以我正在尋找支持的最具包容性的字符集。

+2

任何UTF- *編碼,包括UTF-8。 –

+0

如果您轉到鏈接,您將看到我無法將UTF-8字符打印到文本文件 – amphibient

+3

您的字符是* Unicode *,而不是UTF-8。 UTF-8是編碼所有Unicode標準的編解碼器。你沒有用UTF-8打開你的文件,你使用了默認的語言環境(在Windows上是一個8位代碼頁)。 –

回答

3

任何UTF編碼的應該工作:

  • UTF-8通常是最緊湊的(特別是如果該文本在很大程度上是ASCII兼容),和便攜式具有不同端序系統之間,而不需要BOM(字節訂單標記)。它是支持完整Unicode範圍(以及用於通過網絡提供數據的最常見編碼,例如HTML,XML,JSON)的非Windows系統上使用的最常見的編碼方式。
  • UTF-16通常由Windows系統「寬字符」的API使用它作爲本地編碼)
  • UTF-32是不常見的,並浪費了大量的磁盤空間,唯一的真正好處是字符和字節之間的固定比例(可以將文件大小四減去BOM後,你會得到的字符數)

在一般情況下,我建議使用UTF-8去,除非你知道它會被另一個消耗需要UTF-16之類的工具。

+0

它的價值:GB18030是UFT –

+0

@JohnMachin:我不知道從GB2312的擴展使它在整個Unicode範圍內都是全面的。每天學些新東西。它似乎有一些相對於其他的缺陷(比如不像UTF-8那樣自我同步),但是如果它符合你的需求,我想這是一個可行的選擇。 – ShadowRanger