读取/解码UTF-8转义字符到本机字符

时间:2017-06-20 09:15:03

标签: python csv unicode encoding utf-8

我正在使用Python 2.7的unicodecsv嵌入式模块来读取包含28种不同语言的单词列的CSV文件,其中一些是重音和/或使用完全不同的字母/字符系统。我正在加载CSV

with open(sourceFile, 'rU') as keywordCSV:
    keywordList = csv.reader(keywordCSV, encoding='utf-8-sig', dialect=csv.excel)

但是从keywordList读取当前正在生成unicode转义字符/序列而不是本机字符符号。虽然这并不理想(理想情况下我可以从一开始就将csv中的unicode作为本机字符符号加载),但只要我稍后可以将这些符号转换为本机字符符号(导出到无论哪种文件类型都会使这最简单)。这是怎样的,或者最好是理想的情况呢?我尝试使用诸如these之类的解决方法无济于事,我仍然不确定这是解释器问题还是脚本中的编码问题。

我在阅读文件时使用utf-8-sig的原因是没有这样做会导致(BOM

UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 155:

但由于我不知道的原因,现在已经停止了这种情况。同样,我在打开文件时使用'rU',因为没有这样做会产生

_csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?

但我不确定其中任何一个是否合适。

this问题中,逐个打印每个字符会导致打印本机字符(当从终端运行时,我的代码中也可以使用某些字符),是否有一种方法可以遍历字符和将每一个转换为其原生角色?

在这个已经饱和的主题上发布另一个问题的道歉,但我还没有能够得到其他人的建议。也许我一直在寻找错误的地方尝试解码脚本末尾的编码csv输出,而问题出现在我的csv.reader encoding中。任何帮助将非常感谢。

1 个答案:

答案 0 :(得分:1)

您看到的是Unicode字符的join()。在Python 2.7中,repr()通常只显示ASCII字符。使用转义显示ASCII范围之外的字符。这是出于调试目的,使当前代码页不支持的非打印字符或字符可见。如果要查看呈现的字符,请打印它们,但请注意,终端配置的代码页不支持的字符可能不起作用:

repr()

在下列情况下,配置的代码页437不支持该字符:

>>> s = u'\N{LATIN SMALL LETTER E WITH ACUTE}'
>>> s
u'\xe9'
>>> print repr(s)
u'\xe9'
>>> print s
é
>>> print unicode(s)
é