我想弄清楚在這種情況下發生了什麼。我在Windows 7 64位上,我正在用Python進行Unicode測試。什麼是寫入文件時造成這種垃圾
用下面的Python代碼
#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
#aaaaaa
x = [u'\xa3']
f = open('file_garbage.txt', 'w+')
for s in x:
if s in f.read():
continue
else:
f.write(s.encode('utf-8'))
f.close()
我沒有得到任何錯誤信息,並file_garbage.txt包含
£
當我添加另一個項目爲x像這樣
#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
#aaaaaa
x = [u'\xa3',
u'\xa3']
f = open('file_garbage.txt', 'w+')
for s in x:
if s in f.read():
continue
else:
f.write(s.encode('utf-8'))
f.close()
我得到UnicodeDecodeError
Traceback (most recent call last):
File "file_garbage.py", line 9, in <module>
if s in f.read():
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 2: ordinal not in range(128)
file_garbage.txt將包含任一大約250行的字節這樣
c2a3 4b02 e0a6 5400 6161 6161 6161 6161
6161 6161 6161 6161 6161 6161 6161 6161
6161 6161 6161 6161 6161 610d 0a23 6161
6161 6161 0d0a 0d0a 7820 3d20 5b75 275c
7861 3327 2c0d 0a20 2020 2020 7527 5c78
6133 275d 0d0a 0d0a 6620 3d20 6f70 656e
2827 6669 6c65 5f67 6172 6261 6765 2e74
垃圾等在此
£Kà¦éaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
#aaaaaa
x = [u'\xa3',
u'\xa3']
f = open('file_garbage.txt', 'w+')
for s in x:
if s in f.read():
continue
else:
f.write(s.encode('utf-8'))
f.close()
Python Character Mapping Codec cp1252 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT' with gencodec.py.
iÿÿÿÿNt
接着一串ENQ,DC2,SOH,STX,NUL的符號和鏈接:
垃圾C:\Python27\lib\encodings\cp1252.py
圖片:
我猜測,這是做編碼和/或我處理文件的方式有問題,但我感到困惑究竟是什麼發生的事情,爲什麼結果似乎有所不同。
垃圾似乎只有在文件頂部看似隨機的幾個註釋字符串時纔會生成,但字節總是會以其他方式生成。
如果有幫助,我的系統編碼設置如下:
sys.stdout.encoding : cp850
sys.stdout.isatty() : True
locale.getpreferredencoding() : cp1252
sys.getfilesystemencoding() : mbcs
您是否試圖寫入代碼運行的同一個文件?你的例子看起來像你說垃圾在'file_garbage.py'中,但是你的代碼顯示你打開了一個名爲'file_garbage.txt'的東西。 – BrenBarn
不,我想從'file_garbage.py'寫入一個名爲'file_garbage.txt'的單獨文本文件,我剛剛命名了兩個文件file_garbage進行測試,對於混淆 – Teleshot
因此,您正在嘗試寫入'file_garbage.txt ',但'file_garbage.py'實際上被修改? – BrenBarn