【发布时间】:2014-07-31 18:14:08
【问题描述】:
我正在围绕从 Twitter REST API 获取的推文创建一个 Web 应用程序。我面临一个问题,在 python 控制台中打印时,韩语、中文和其他亚洲语言等非 unicode 字符可以正确显示,但是当我将其存储到 SQL 数据库时,字符串值会更改为“????? ???”或类似的东西。
我正在使用 Twython 模块,这是我用于获取推文的代码,它工作正常,当我打印推文时,它会正确显示这些字符
from twython import Twython
import json
APP_KEY= 'abcdfefdags'
APP_SECRET = 'abcdefghdfa'
SEARCH_QUERY='russia'
SEARCH_COUNT= 3
twitter = Twython(APP_KEY, APP_SECRET, oauth_version=2)
ACCESS_TOKEN = twitter.obtain_access_token()
twitter1 = Twython(APP_KEY, access_token=ACCESS_TOKEN)
def getTweetQuery():
return SEARCH_QUERY
def getTweetTextDict():
tweetTempList = []
data = []
listOfTweets = dict()
data = twitter1.search(q=SEARCH_QUERY, count=SEARCH_COUNT)
for x in range(0,SEARCH_COUNT):
tweetData = dict()
s = (data['statuses'][x]['text'])
tweetData['text'] = s
s = (data['statuses'][x]['created_at'])
tweetData['created_at'] = s
s = (data['statuses'][x]['user']['name'])
tweetData['name'] = s
s = (data['statuses'][x]['user']['profile_image_url'])
tweetData['profile_image_url'] = s
listOfTweets[x] = tweetData
return listOfTweets
这是我将它们存储到 SQL 数据库时的代码
import mysql.connector
from firstsite.website import twit
class SQLDataSystem:
def insertNewTweets(self):
cnx = mysql.connector.connect(user='djangouser', password='1234',
host='127.0.0.1',
database='django_db')
cursor = cnx.cursor()
dataPacket = twit.getTweetTextDict()
dataPacketLength = len(dataPacket.keys())
for x in range (0, dataPacketLength):
tweet = dataPacket[x]['text']
tweetTime = dataPacket[x]['created_at']
twitterName = dataPacket[x]['name']
twitterPicture = dataPacket[x]['profile_image_url']
add_tweet = ("INSERT INTO website_tweets " +
"(tweet, tweetTime, twitterName, twitterPicture) "+
"VALUES (%s, %s, %s, %s)")
arguments = (tweet, tweetTime, twitterName, twitterPicture)
cursor.execute(add_tweet, arguments)
cnx.commit()
当我通过
检查数据库时SELECT * FROM website_tweets;
以及通过 Python 检索和打印它,这是一个可能已经说过的字符串 '@nytvideo @@KOREA:왜 이 테러리스트들은 구속하지 않나요?? 变成 '@nytvideo @@KOREA:? ? ?????? ??? ????? 我该如何解决这个问题?
【问题讨论】:
-
使用不同的排序规则,支持这些字符的排序规则?
-
您是否考虑过手动将字符编码为 ASCII,然后保存该字符串?
-
"手动将字符编码为 ASCII"?那句话没有意义。 ASCII 没有韩文字符的表示。这里可能的原因是数据库不支持字符(错误的排序规则,正如@RobertHarvey 已经指出的那样),字符串在 Python 中也没有存储为 unicode,SQL 框架不支持 unicode 字符串,或者这是字符串的输出,以验证其内容是否错误。有很多方法可能会出错。文字不易。
-
@LasseV.Karlsen 字符串在通过 SQL 之前会被正确打印出来