我試圖編寫一個列表到txt文件,編碼utf-8沒有BOM。但有一個問題是: 如果我創建使用UTF-8文件withou BOM編碼:將列表寫入文件txt(utf-8)
ポ
1
田
11
直
11
子
11
,用我的功能來讀給一個列表:
import codecs
def file_to_list(file_name):
results = []
f = codecs.open(file_name, encoding='utf-8')
for line in f:
results.append(line.replace('\r\n', ''))
return results
list_1 = file_to_list('test_read.txt')
print(list_1)
我得到的確定結果:['ポ', '1', '田', '11', '直', '11', '子', '11']
但畢竟這我用另一個函數寫回再次文件並讀取該文件,一個問題出現:
def list_to_file(file_name, thelist):
f = codecs.open(file_name, "w", encoding='utf-8')
for item in thelist:
f.write("%s\n" % item)
list_to_file('test_read.txt', list_1)
list_2 = file_to_list('test_read.txt')
print(list_2)
的返回的打印是:['ポ\n', '1\n', '田\n', '11\n', '直\n', '11\n', '子\n', '11\n']
那麼,製作'\n'
有什麼不好?
'line.replace( '\ r \ n',' '')不會觸及'list_to_file'所寫的普通''n''字節。順便說一句,你應該總是提到帶有Unicode問題的Python版本,因爲Py2和Py3在Unicode處理方面有很大的不同。此外,UTF-8編碼的文件應該從BOM開始,除非您需要使用一些破碎的軟件。 –
@ PM2Ring你能教我如何去除它嗎? – AlphaWolf
你應該嘗試摩西的回答!您可能會發現這篇文章有用:[Pragmatic Unicode](http://nedbatchelder.com/text/unipain.html),它由SO老將Ned Batchelder編寫。 –