2015-07-02 31 views
0

這裏是我的代碼爲 ' XE4' 的Unicode錯誤寫外來字符轉換成CSV

下工作,但寫了錯誤的字符串

import csv 
import codecs 


if __name__ == "__main__": 

    # This works for writing unico but writes wrong string 
    with codecs.open("./why_unicode.csv", "wb") as csv_file: 

     writer = csv.writer(csv_file) 


     unico = u'IP\u4e13\u7528\u8033\u673a.\u9ed1'.encode('utf-8') 
     writer.writerow(unico) 

下面是結果

I,P,ä,¸,「,ç,」,¨,è,€,³,æ,œ,º,.,é,»,‘ 

這不是正確的字符串。正確的字符串是'IP專用耳機.黑'

這不起作用

import csv 
import codecs 


if __name__ == "__main__": 

    with codecs.open("./why_unicode.csv", "wb", 'utf-8') as csv_file: 

     writer = csv.writer(csv_file) 
     unico = u'IP\u4e13\u7528\u8033\u673a.\u9ed1' 

     writer.writerow(unico) 

以下是錯誤

SyntaxError: Non-ASCII character '\xe4' in file 
test_unicode.py on line 15, but no encoding declared; 
see http://www.python.org/peps/pep-0263.html for details 

,這將無法運行在所有

import csv 
import codecs 


if __name__ == "__main__": 

    with codecs.open("./why_unicode.csv", "wb") as csv_file: 

     writer = csv.writer(csv_file) 


     unico = u'IP\u4e13\u7528\u8033\u673a.\u9ed1'.encode('utf-8') 
     #chn = u'IP專用耳機.黑' # even commenting out will return error 
     writer.writerow(unico) 

的標準響應,在這種類型的問題在計算器是要麼使用codecs或到encode('utf-8),我都試過但都沒有工作,這有點令人困惑,有人可以幫我嗎?

編輯:

的腳本使用Python 2.7.3(蟒蛇-V)

+1

起初很高興知道您使用的是哪個Python版本。處理unicode字符時,它們的行爲有着根本性的不同。我在python3中遇到了μ符號的類似問題。我剛纔在python3中試過,得到了b'IP \ xe4 \ xb8 \ x93 \ xe7 \ x94 \ xa8 \ xe8 \ x80 \ xb3 \ xe6 \ x9c \ xba。\ xe9 \ xbb \ x91'作爲輸出。 –

+1

這個錯誤告訴你這個問題。 python在你的文件中使用ascii。您可以使用類似於「# - * - coding:utf-8 - * - 」的文件聲明您的文件編碼。也許這就是足夠的,只是偶然在此線程:http://stackoverflow.com/questions/6289474/working-with-utf-8-encoding-in-python-source –

+1

你不能在Python 2 csv模塊使用unicode HTTP ://stackoverflow.com/questions/30551429/error-writing-data-to-csv-due-to-ascii-error-in-python/30551550#30551550,添加編碼聲明,你的代碼應該運行一旦你編碼 –

回答

1

有在你的代碼的幾個錯誤。

要解決SyntaxError: Non-ASCII character '\xe4' in file,在頂部加入編碼聲明:# -*- coding: utf-8 -*-。該錯誤僅僅意味着源代碼中的某個地方使用了字面非ASCII字符(即使您在註釋中使用了該字符)。

下一個錯誤是不正確的csv使用。 writerow()接受一行 - 一系列的項目。你不應該把它傳遞一個字節串,除非你想每一列是一個字節是一個字節序列(你可能沒有):

#!/usr/bin/env python2 
# -*- coding: utf-8 -*- 
import csv 

text = u'IP專用耳機.黑' 
with open("why_unicode.csv", "wb") as file: 
    writer = csv.writer(file) 
    for i in range(3): 
     writer.writerow([text.encode('utf-8'), i]) 

注意:你不需要codecs要寫入的字節。

爲了避免手動編碼每個Unicode字符串,見UnicodeWriter example in csv docs

相關問題