在Python中从.CSV检索并显示UTF8

2024-09-30 02:15:08 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上我今天玩得很开心。我把这个数据文件叫做测试.csv编码为UTF-8:

“Nguyễn”,0.500 “Trần”,0.250 “Lè”,0.250

现在我试着用这个代码来读它,它显示的很有趣:Trá

现在我已经看过了2.6版的所有Python文档,这是我使用的一个,我不能让包装器与互联网上的所有想法一起工作,我认为这些想法都是非常正确的,只是没有被你正确地应用。另一方面,我了解到并不是所有的字体都能正确地显示这些字符,这是我以前从未想过的,而且我已经了解了很多关于Unicode等的知识,所以这当然不是浪费时间。在

如果有人能指出我错在哪里,我将不胜感激。在

以下是根据以下请求更新的代码,该代码返回此错误-

Traceback (most recent call last):
  File "surname_generator.py", line 39, in 
    probfamilynames = [(familyname,float(prob)) for familyname,prob in unicode_csv_reader(open(familynamelist))]
  File "surname_generator.py", line 27, in unicode_csv_reader
    for row in csv_reader: 
  File "surname_generator.py", line 33, in utf_8_encoder
    yield line.encode('utf-8') UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
^{pr2}$

Tags: csv代码inpyforlineunicodesurname
3条回答

你当前的问题是csv-unicode-u阅读器给了你一个糟糕的选择。顾名思义,正如文件中明确指出的:

“”是一个生成器,用于包装csv.reader处理Unicode CSV数据(Unicode字符串列表)。“”“在

你没有unicode字符串,你有用UTF-8编码的str字符串。在

建议:把csv_unicode_阅读器的东西吹走。简单明了地获取每一行,就好像它是用ascii编码的一样。然后将每行转换为unicode:

unicode_row = [field.decode('utf8') for field in str_row]

回到原来的问题:

(1)要获得字体等方面的帮助,您需要说明您在哪个平台上运行,以及您使用什么软件来显示unicode字符串。在

(2)如果您希望以独立于平台的方式检查数据,请查看repr()内置函数和unicodedata模块中的name函数。在

python文档中有unicode_csv_阅读器演示: http://docs.python.org/library/csv.html

unicode_csv_reader(open(familynamelist))正试图将非unicode数据(带utf-8编码的字节字符串)传递给您编写的预期unicode数据的函数。你可以用编解码器.打开(来自标准库模块编解码器),但这是迂回:编解码器将为您执行utf8->;unicode,然后您的代码将执行unicode->;utf8,有什么意义?在

相反,定义一个更像这样的函数…:

def encoded_csv_reader_to_unicode(encoded_csv_data,
                                  coding='utf-8',
                                  dialect=csv.excel,
                                  **kwargs):
  csv_reader = csv.reader(encoded_csv_data,
                          dialect=dialect,
                          **kwargs)
  for row in csv_reader:
      yield [unicode(cell, coding) for cell in row]

并使用encoded_csv_reader_to_unicode(open(familynamelist))。在

相关问题 更多 >

    热门问题