Python中的土耳其字符
我正在玩Twitter的API,但对土耳其字符的编码有几个问题。以下是我正在使用的代码:
# -*- coding: cp1254 -*-
import sys
import csv
import tweepy
import locale
import string
locale.setlocale(locale.LC_ALL, "Turkish")
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)
f=open("tweets.csv", "wb")
for q in [list of search queries]:
a=[tweet.text.encode("utf-8") for tweet in tweepy.Cursor(api.search, q, result_type="recent", include_entities=True, lang="tr").items(20)]
wr=csv.writer(f, quoting=csv.QUOTE_ALL)
wr.writerow(q)
简单来说,我的做法是通过遍历一个搜索查询的列表来运行搜索API,然后把推文写入一个Excel文件。不过,不管我怎么做,推文里的土耳其字符总是被替换成其他字符。我尝试了很多方法(比如设置地区,添加 .encode("utf-8") 这部分等等),但还是不知道该怎么解决。
我说的情况是这样的:
实际写出来的是:Dün akÅŸam Ülker Arena
我希望写出来的是:Dün akşam Ülker Arena
我不明白的是,当我把地区设置为土耳其时,ü、Ü和ş这些字母都在本地字母里,但Python却把这些字母替换掉了。
3 个回答
打开文件的时候,试着指定一下编码方式:
open('csvfilename.csv',encoding='utf-8')
使用 iso-8859-9
或 iso-8859
编码可以让你显示土耳其字符。
补充说明:如果你一定要使用utf8编码,可以先解码再编码。你可以这样做: myString.decode('iso-8859-9').encode('utf8')
我在我的系统上复制了你的代码(Windows 7,Office 2010),并且成功运行了。我使用了你的代码,但我把搜索的内容简化了一下,如下所示:
search_results = api.search(q="canan1405", count=10)
for tweet in search_results:
print tweet.text.encode('utf-8')
我从'canan1405'这个用户那里提取了推文,因为里面有土耳其字符。(希望她不介意!)
我只是把我的脚本输出重定向到一个文件,方法如下:
python so_24038317.py > tweets.csv
到目前为止,tweets.csv文件里包含的是用UTF-8编码的Unicode字符。如果我像你那样双击这个文件,Excel默认的显示方式会出现乱码,跟你遇到的情况差不多:
与其双击csv文件,不如按照以下步骤导入文件:
- 打开Excel。
- 点击菜单上的“数据”选项卡。
- 在“获取外部数据”中点击“从文本”图标。
- 找到CSV文件,然后点击“导入”按钮。
- 会出现一个向导。在我的情况下,它正确猜测了文件的内容(见“文件来源:”下拉菜单):
你可以完成向导的其余步骤,但这些是可选的。文件显示得很正确:
就我所知,它包含(并正确显示)以下土耳其字符:
ş, Ğ, İ, ğ, ı, ç
注意,“Oyy şirin kedi”这个字符串后面的字符是一个表情符号,而不是有效的UTF-8字符。希望这能帮到你。