UnicodeEncodeError:&#39; charmap&#39;编解码器无法对字符&#39; \ u5347&#39;进行编码。在位置68:字符映射到<undefined>

时间:2017-03-02 04:20:20

标签: python csv

我是python的新手。我从SQL Server读取数据,然后将数据写入csv文件。表行包含数字,字符串和日期时间值。我尝试了不同的方法来编写数据。例如,

#method 1
import pandas as pd

df = pd.DataFrame(table, columns=["colummn"])

df.to_csv('list.csv', index=False)*  

#method 2
import csv

fl = open('OnlineplayDatabase.csv', 'w')

writer = csv.writer(fl)

for row in table:

    writer.writerow(row)

fl.close()    

这两种方法通常都有效。但是当某些行包含中文字符时(参见下面的示例),我收到了编码错误。错误消息显示:

codecs.charmap_encode(input,self.errors,encoding_table)[0]

#Error Code   
UnicodeEncodeError: 'charmap' codec can't encode character '\u5347' in position 68: character maps to <undefined>

我尝试使用utf-8对行中的字段进行编码。但有些领域是数字。

非常感谢您的帮助!

('120.239.9.116  ',
 'gyandroid ',
 4,
 9,
 'Dalvik/1.6.0(Linux;U;Android4.4.2;升级版Build/KVT49L)                                                                      datetime.datetime(2016, 6, 11, 20, 54, 19),
 datetime.datetime(2016, 6, 11, 20, 56, 53),
 11521.0)

2 个答案:

答案 0 :(得分:0)

再次查看错误。这种情况正在发生,因为数据框中的某些地方有以\u开头的单词。你需要摆脱它。看看这是否有效。使用下面的remove_u功能删除\u

def remove_u(word):
    word_u = (word.encode('unicode-escape')).decode("utf-8", "strict")
    if r'\u' in word_u: 
        # print(True)
        return word_u.split('\\u')[1]
    return word

df.loc[:, 'colummn'] = df['colummn'].apply(func = remove_u)

更新数据框后,请尝试重新编写。

修改

我假设你的专栏是由单个词组成的。如果您的列中包含字符串,请使用remove_u

的修改版本
def remove_u(input_string):
    words = input_string.split()
    words_u = [(word.encode('unicode-escape')).decode("utf-8", "strict") for word in words]
    words_u = [word_u.split('\\u')[1] if r'\u' in word_u else word_u for word_u in words_u]
    # print(words_u)
    return ' '.join(words_u)

答案 1 :(得分:0)

尝试使用方法2:

#method 2
import csv

fl = open('OnlineplayDatabase.csv', 'w', encoding='utf8') #set the encoding to utf8
writer = csv.writer(fl)

for row in table:
    writer.writerow(row)

fl.close()    

也来看看-http://www.pgbovine.net/unicode-python-errors.htm