2016-12-03 99 views
0

請幫忙。字符編碼故障

我正在從意大利twitterers下載tweet來進行後續分析。 一旦dowloaded,我將它們存儲在一個python數據框架,然後我將它們寫入一個文件。

在文件中寫入文件時,像意大利語言中存在的「è」這樣的特殊字符會轉換爲像X8/XE這樣的字符。

我試過了utf8,Latin1或ISO-8859-1這幾種編碼,但問題依然存在。

dataframe的每一行都是一個用戶,它攜帶不同的信息,如名稱,屏幕,名稱....和描述,這是我遇到問題的字段。

這裏不用我用它來將用戶添加到現有的數據幀中的臺詞:

b=pd.DataFrame(np.array([[user.id, 
          user.created_at, 
          user.lang.encode('utf-8'), 
          user.screen_name.encode('utf-8'), 
          user.name.encode('utf-8'), 
          user.location.encode('utf-8'), 
          user.description.encode('utf-8'), 
          user.followers_count,       
          user.profile_image_url_https.encode('utf-8')]]), columns=col).append(b, ignore_index=True) 

這是我寫的文件中的信息

b.to_csv(filename, encoding="utf-8") 

單從下載後的方式Twitter,在數據框I中例如可以閱讀:

「La vitaèun'opportunità... coglila」

,但在文件中它被轉換在:

B 「津樂匯\ XC3 \ xa8 un'opportunit \ XC3 \ XA0 ... coglila」

我應該怎麼辦將其重新轉換回原始字符串?

+0

你怎麼想將數據保存在文件中?你在使用二進制模式嗎? – user312016

+1

它將字符串轉換爲所謂的「二進制字符串」。你可以通過調用'b「將它們轉換爲普通的字符串。」La vita \ xc3 \ xa8 un'opportunit \ xc3 \ xa0 ... coglila「.decode('utf-8')'。 –

+0

如果您打印它,您應該能正確看到字符串。 – sirfz

回答

0

你試過沒有編碼也沒有將它們解碼爲utf-8嗎?這應該開箱即用。 如果你真的想給他們進行解碼,然後使用.str.decode()方法在每個系列:

b['series_name'] = b['series_name'].str.decode('utf-8') 

然後將其保存到CSV不進行任何編碼:

b.to_csv(filename) 
+0

嗨,我不得不介紹編碼,因爲我遇到了另一個問題。無論如何,我們現在處於正確的軌道。命令b「La vita \ xc3 \ xa8 un'opportunit \ xc3 \ xa0 ... coglila」.decode('utf-8')完美地工作。但是命令b ['series_name'] = b ['series_name']。str.decode('utf-8')沒有。我想這是因爲['series_name']現在包含STRING「b'La vita \ xc3 \ xa8 un'opportunit \ xc3 \ xa0 ... coglila'」不是二進制字符串.... AGGGGHHHH !!! :-) – user3623123

+0

在任何情況下我都不明白:當我讀取CVS文件時,我使用編碼「utf-8」。 A = pd.read_csv(filename,encoding =「utf8」)它應該解碼它本身! – user3623123

+0

然後嘗試在創建數據框時解碼它:user.lang.decode('utf-8')而不是user.lang.encode('utf-8')。等等,當你輸入(user.lang)時,你會得到什麼類型? –