我收到了一些编码的文本,但我不知道使用了什么字符集.有没有办法使用Python确定文本文件的编码?如何检测文本文件的编码/代码页处理C#.
当涉及UTF-8/Unicode时,Python中的csv模块无法正常工作.我在Python文档和其他网页上找到了适用于特定情况的片段,但您必须了解您正在处理的编码并使用相应的代码段.
如何从Python 2.6中"正常工作"的.csv文件中读取和写入字符串和Unicode字符串?或者这是Python 2.6的限制,没有简单的解决方案?
我正在阅读带有Python csv模块的文件,并且还有另一个编码问题(抱歉,这里有很多).
在CSV文件中,有£符号.读完行并打印后,它们就变成了\ xa3.
尝试将它们编码为Unicode会产生UnicodeDecodeError:
row = [unicode(x.strip()) for x in row]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa3 in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我一直在阅读关于StackOverflow 的csv文档和许多其他问题.我认为在ASCII中成为\ xa3意味着原始CSV文件是UTF-8.
(顺便提一下,有没有快速检查CSV文件编码的方法?)
如果它是UTF-8,那么csv模块是否应该能够应对它?它似乎正在将所有符号转换为ASCII,即使文档声称它接受UTF-8.
我已经尝试添加csv示例中unicode_csv_reader描述的函数,但它没有帮助.
----编辑-----
我应该澄清一件事.我看过这个看起来很相似的问题.但添加unicode_csv_reader定义的函数会产生不同的错误:
yield [unicode(cell, 'utf-8') for cell in row]
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa3 in position 8: unexpected code byte
Run Code Online (Sandbox Code Playgroud)
那么也许我的文件毕竟不是UTF8?我该怎么说?
我正在尝试解析(并转义)存储在Windows-1251字符编码中的CSV文件的行.使用这个优秀的答案来处理这种编码我最终得到了这一行来测试输出,由于某种原因,这是有效的:
print(row[0]+','+row[1])
Run Code Online (Sandbox Code Playgroud)
输出:
??????? ??????? ???????????,1 ????
Run Code Online (Sandbox Code Playgroud)
虽然这条线不起作用:
print("{0},{1}".format(*row))
Run Code Online (Sandbox Code Playgroud)
输出此错误:
Name,Variant
Traceback (most recent call last):
File "Russian.py", line 26, in <module>
print("{0},{1}".format(*row))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
以下是CSV的前两行:
Name,Variant
??????? ??????? ???????????,1 ????
Run Code Online (Sandbox Code Playgroud)
如果它有帮助,这里是Russian.py的完整来源:
import csv
import cgi
from chardet.universaldetector import UniversalDetector
chardet_detector = UniversalDetector()
def charset_detect(f, chunk_size=4096):
global chardet_detector
chardet_detector.reset()
while 1:
chunk = f.read(chunk_size)
if not chunk: break
chardet_detector.feed(chunk)
if chardet_detector.done: break
chardet_detector.close()
return chardet_detector.result …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个.csv文件,其中包含我已存储到Twitter搜索API列表中的数据.我用我选择的关键字(在这种情况下为'reddit')保存了最后100条推文,我试图将每条推文保存到.csv文件中的单元格中.我的代码在下面,我返回的错误是:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 0: ordinal not in range(128)
如果有人知道我能做些什么来解决这个问题,我将不胜感激!
import sys
import os
import urllib
import urllib2
import json
from pprint import pprint
import csv
import sentiment_analyzer
import codecs
class Twitter:
def __init__(self):
self.api_url = {}
self.api_url['search'] = 'http://search.twitter.com/search.json?'
def search(self, params):
url = self.make_url(params, apitype='search')
data = json.loads(urllib2.urlopen(url).read().decode('utf-8').encode('ascii', 'ignore'))
txt = []
for obj in data['results']:
txt.append(obj['text'])
return '\n'.join(txt)
def make_url(self, params, apitype='search'):
baseurl = self.api_url[apitype]
return baseurl + urllib.urlencode(params)
if __name__ …Run Code Online (Sandbox Code Playgroud) python ×5
csv ×4
encoding ×2
python-2.x ×1
text-files ×1
unicode ×1
urllib2 ×1
utf-8 ×1
windows-1251 ×1