Python,将输出编码为 UTF-8

标签 python python-2.7 encoding utf-8

我有一个构建由 UTF-8 编码字符组成的字符串的定义。使用 'w+', "utf-8" 参数打开输出文件。

但是,当我尝试 x.write(string) 时,我得到了 UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 1: ordinal not在范围内(128)

我假设这是因为通常你会做 `print(u'something')。但我需要使用一个变量,而 u'_' 中的引号否定了...

有什么建议吗?

编辑:此处的实际代码:

source = codecs.open("actionbreak/" + target + '.csv','r', "utf-8")
outTarget = codecs.open("actionbreak/" + newTarget, 'w+', "utf-8")
x = str(actionT(splitList[0], splitList[1]))
outTarget.write(x)

基本上所有这一切应该做的是为我构建大量看起来类似于此的字符串:

[日木奕可交付成果]= CASE WHEN things = 11 然后 C ELSE 0 结束

最佳答案

你在使用 codecs.open() ? Python 2.7 的内置 open() 不支持特定的编码,这意味着您必须手动编码非 ascii 字符串(正如其他人所指出的),但是 codecs.open() 确实支持这一点,并且可能比手动编码所有字符串更容易加入。


当您实际使用 codecs.open() 时,按照您添加的代码进行操作,并在自己查找一些内容后,我建议您尝试使用以下命令打开输入和/或输出文件编码 "utf-8-sig",它将自动处理 UTF-8 的 BOM(请参阅本节底部附近的 http://docs.python.org/2/library/codecs.html#encodings-and-unicode)我认为这只对输入文件有影响,但如果这些组合(utf-8-sig/utf-8、utf-8/utf-8-sig、utf-8-sig/utf-8-sig)都不起作用,那么我相信最有可能的情况是可能是您的输入文件使用 BOM 以不同的 Unicode 格式编码,因为 Python 的默认 UTF-8 编解码器将 BOM 解释为常规字符,因此输入不会有问题,但输出可能有问题。


刚注意到这一点,但是...当您使用 codecs.open() 时,它需要一个 Unicode 字符串,而不是编码字符串;尝试 x = unicode(actionT(splitList[0], splitList[1]))

尝试解码 unicode 字符串时也可能发生错误(请参阅 http://wiki.python.org/moin/UnicodeEncodeError ),但我认为除非 actionT() 或您的列表拆分做了一些事情,否则不应该发生这种情况导致它们被视为非 Unicode 字符串的 Unicode 字符串。

关于Python,将输出编码为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17577727/

相关文章:

python - Python 中的截断路径

python - 使用 python 中的线程从无限循环中读取结果

php - 使用编码为 UTF-8 的 PDFTk 填充的 pdf 中缺少字符

python - 解码并打印转义字符

python - 如何制作迭代器集

python - 如何在python中获取文本字符串的视觉长度

python - 如何使Python中的for循环更快?

python - 类型错误 : expected a character buffer object

python - 词嵌入提取

java - 文件编码的默认字符集 - Java