YouTube API UnicodeEncodeError in Python 3.4

孤者浪人 提交于 2019-12-20 03:07:42

问题


I was exploring the YouTube Data API and finding that improperly encoded results were holding me back. I got good results until I retrieve a set that includes unmapped characters in the titles. My code is NOW (cleaned up a little for you fine folks):

import urllib.request
import urllib.parse
import json
import datetime

# Look for videos published up to THIS MANY hours ago
IntHoursToSub = 2
RightNow = datetime.datetime.utcnow()
StartedAgo = datetime.timedelta(hours=-(IntHoursToSub))
HourAgo = RightNow + StartedAgo
HourAgo = str(HourAgo).replace(" ", "T")
HourAgo = HourAgo[:HourAgo.find(".")] + "Z"

# Get API Key from your safe place and set up the API link
YouTubeAPIKey = open('YouTubeAPIKey.txt', 'r').read()
locuURL = "https://www.googleapis.com/youtube/v3/search"
values = {"key": YouTubeAPIKey,
          "part": "snippet",
          "publishedAfter": HourAgo,
          "relevanceLanguage": "en",
          "regionCode": "us",
          "maxResults": "50",
          "type": "live"}
postData = urllib.parse.urlencode(values)
fullURL = locuURL + "?" + postData

# Set up response holder and handle exceptions
respData = ""
try:
    req = urllib.request.Request(fullURL)
    respData = urllib.request.urlopen(req).read().decode()
except Exception as e:
    print(str(e))
#print(respData)

# Read JSON response and iterate through for video names/URLs
jsonData = json.loads(respData)
for object in jsonData["items"]:
    if object["id"]["kind"] == "youtube#video":
        print(object["snippet"]["title"], "https://www.youtube.com/watch?v=" + object["id"]["videoId"])

The error was:

Traceback (most recent call last):
  File "C:/Users/Chad LaFarge/PycharmProjects/APIAccess/YouTubeAPI.py", line 33, in <module>
    print(respData)
  File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u25bb' in position 11737: character maps to <undefined>

UPDATE

MJY Called it! Starting from PyCharm menu bar: File -> Settings... -> Editor -> File Encodings, then set: "IDE Encoding", "Project Encoding" and "Default encoding for properties files" ALL to UTF-8 and she now works like a charm.

Many thanks!


回答1:


Check the sys.stdout.encoding.
If this is not UTF-8, the problem is not in YouTube API.
Please check such as environment variables PYTHONIOENCODING, terminal and locale settings.



来源:https://stackoverflow.com/questions/30857027/youtube-api-unicodeencodeerror-in-python-3-4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!