Python - UnicodeEncodeError - 在打印函数中使用 gspread 进行编码('utf-8')

Python - UnicodeEncodeError - encode('utf-8') with gspread in print fuction

我正在尝试 运行 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)
-------
-------

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

export PYTHONIOENCODING=utf-8

在标准终端中 window。不在 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')

哪个成功了。