Python - UnicodeEncodeError - 编码('utf-8'),带有gspread in print功能

时间:2018-02-01 20:46:27

标签: python unicode utf-8 gspread

我正在尝试运行gspread代码,以便从Google电子表格中打印信息。 工作表包含í,ú和ó字符 - 这就是我得到UnicodeEncodeError的原因。

我读了Unicode HOWTO和其他所有人都告诉你使用“.encode('utf-8')”或decode(),但不知道如何在我的情况下实现它打印功能。

我尝试过这样的事情:

#dsheet = sheet.encode('utf-8')

# -*- coding: utf-8 -*-

没有效果。

我在MacOS上使用python 3.

(该代码有效我删除了所有的UTF字符手册以供查看 - 我只是想知道将来如何计算编码)

守则:

    # -*- coding: utf-8 -*-
import gspread
from oauth2client.service_account import ServiceAccountCredentials


# use creds to create a client to interact with the Google Drive API
scope = ['https://spreadsheets.google.com/feeds']
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
client = gspread.authorize(creds)

# Find a workbook by name and open the first sheet
# Make sure you use the right name here.
sheet = client.open("Legislators 2017").sheet1

#dsheet = sheet.encode('utf-8')
# Extract and print all of the values
list_of_hashes = sheet.get_all_records()
print(list_of_hashes)

错误:

------
Traceback (most recent call last):
  File "spreadsheet.py", line 18, in <module>
    print(list_of_hashes)
UnicodeEncodeError: 'ascii' codec can't encode character '\xed' in position 84066: ordinal not in range(128)
------
Traceback (most recent call last):
  File "spreadsheet.py", line 18, in <module>
    print(list_of_hashes)
UnicodeEncodeError: 'ascii' codec can't encode character '\xf3' in position 398608: ordinal not in range(128)
-------
-------

1 个答案:

答案 0 :(得分:1)

我修复了问题,发现它不是唯一的问题。 我在Mac上将PYTHONIOENCODING设置为UTF-8:只需输入:

export PYTHONIOENCODING=utf-8

在标准终端窗口中。不是在Python Shell中!

在这种特殊情况下,我使用了仍显示错误的Atom-Runner。 要解决方法,您可以在系统代码中将编码指定为utf-8:

import sys
import io

sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')

这就是诀窍。