【问题标题】:Turkish characters in pythonpython中的土耳其语字符
【发布时间】:2014-07-25 03:43:45
【问题描述】:

我正在使用 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)

基本上,我正在做的是通过遍历搜索查询列表然后将推文写入 excel 文件来运行搜索 api。但是,无论我做什么,推文都是通过用其他替代品替换常规土耳其字符来编写的。我已经尝试了几件事(设置语言环境、添加 .encode("utf-8") 部分等),但我仍然不知道如何修复它。

这就是我要说的:

写的是什么:Dün akÅŸam Ülker Arena

我希望它写的内容:Dün akşam Ülker Arena

我不明白的是,当我将语言环境设置为土耳其语时,ü、Ü 和 ş 都在本地字母中,但是 Python 替换了这些字母。

【问题讨论】:

  • 您是在查看 csv 文件以查看写入的内容吗?我认为您需要一个支持 utf 的文件查看器才能看到正确的土耳其语字符。
  • 是的,我正在使用 Excel 来查看 csv 文件。我只是手动将土耳其语字符输入 Excel,然后将其保存为 csv 文件。当我再次打开它时,“ü”字符仍然存在,但“ş”字符已被替换为“?”。由于“ü”是在我手动执行时维护的,Python 不应该也是这样吗?
  • 我曾经遇到过类似的问题,但没有费心去解决它。尝试使用 python 程序读取它,该程序解码文件中的文本并将输出显示到显示框或其他东西。请记住,命令提示符和许多其他控制台无法输出 unicode 字符。许多IDE都可以做到。我认为 Excel 在显示 utf 字符时确实存在问题。

标签: python twitter tweepy turkish


【解决方案1】:

我在我的系统(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 文件,而是使用以下步骤导入文件:

  1. 启动 Excel。
  2. 单击功能区上的“数据”选项卡。
  3. 单击“获取外部数据”中的“来自文本”图标。
  4. 找到 CSV 文件并单击“导入”按钮。
  5. 将显示一个向导。就我而言,它对文件内容提出了正确的猜测(请参阅“文件来源:”下拉菜单):

您可以完成向导的其余步骤,但它们是可选的。文件显示正确:

据我所知,它包含(并正确显示)以下土耳其语字符:

ş, Ğ, İ, ğ, ı, ç

请注意,紧跟在字符串“Oyy şirin kedi”之后的字符是表情符号,而不是有效的 UTF-8 字符。希望这会有所帮助。

【讨论】:

    【解决方案2】:

    使用iso-8859-9iso-8859 编码以获得土耳其语字符。

    编辑: 如果您绝对想要 utf8 编码,请在之后解码和编码 你可以这样做myString.decode('iso-8859-9').encode('utf8')

    【讨论】:

    • 感谢您的回复!我尝试了以下方法:'(a=[tweet.text.decode(iso-8859-9).encode("utf-8") for tweet in tweepy.Cursor(api.search, q, result_type="recent", include_entities=True, lang="tr").items(20)])' 但我得到一个错误提示 (UnicodeEncodeError: 'ascii' codec can't encode character u'\u015e' in position 23: ordinal not在范围内(128))。我该如何解决这个问题?
    • 尝试只解码,我认为有些土耳其字母无法编码..myString.decode('iso-8859-9')
    • 你也可以使用unicode函数:unicode(s, 'utf-8')
    • 我用这种编码读取了我的文件,我的土耳其字符问题得到了解决。示例:Dataset(root.filename,"r",encoding='iso-8859-9')
    【解决方案3】:

    打开文件时尝试给编码:

    open('csvfilename.csv',encoding='utf-8')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多