Python 编解码器模块

标签 python

我正在尝试将保存为 UTF-8 的文件加载到包含 14 种不同语言的 python (ver2.6.6) 中。我正在使用 python codecs 模块来解码 txt 文件。

import codecs
f = open('C:/temp/list_test.txt', 'r')
    for lines in f:
        line=filter_str(lines.decode("utf-8")

这一切都很好。我解析整个文件然后想导出 14 种不同的语言文件。我无法理解的问题如下

我使用以下代码进行输出:

malangout = codecs.open("C:/temp/'polish.txt",'w','utf-8','surrogateescape')
    for item in lang_dic['English']:
         temp = lang_dic[lang1][item]
         malangout.write(temp + '\n')
    malangout.close() 

例子:

  • 语言:波兰语
  • 预期输出:Dziennik zakłóceń
  • 实际输出:Dziennik zak‚óceƒ

字符串按原样存储:

u'Dziennik zak\u201a\xf3ce\u0192'

我尝试了 python 文档中的许多编码(7.8 编解码器)。此时任何信息都会有所帮助。

最佳答案

The string is stored as is:

u'Dziennik zak\u201a\xf3ce\u0192'

好吧,这是一个问题,因为

In [25]: print(u'Dziennik zak\u201a\xf3ce\u0192')
Dziennik zak‚óceƒ

相对于

In [26]: print(u'Dziennik zak\u0142\xf3ce\u0144')
Dziennik zakłóceń

看来您存储的 unicode 不正确。你确定它在 C:/temp/list_test.txt 中是正确的吗?即list_test.txt是否包含

In [28]: u'Dziennik zak\u201a\xf3ce\u0192'.encode('utf-8')
Out[28]: 'Dziennik zak\xe2\x80\x9a\xc3\xb3ce\xc6\x92'

In [27]: u'Dziennik zak\u0142\xf3ce\u0144'.encode('utf-8')
Out[27]: 'Dziennik zak\xc5\x82\xc3\xb3ce\xc5\x84'

?


附言。你可能想改变

temp + '\n'

temp + u'\n'

为了清楚起见,您将两个 unicode 加在一起形成一个 unicode。 上面两行在 Python2 中具有相同的结果,但在 Python3 中将 unicodestr 一起添加会引发 TypeError。即使在 Python3 中,'\n'unicode,我认为过渡到 Python3 的挑战在于改变一个人对混合 unicodestr。在 Python2 中,它是为您默默尝试的,在 Python3 中是不允许的。

关于Python 编解码器模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8962242/

相关文章:

Python SDK Azure 计算机视觉 : 'bytes' object has no attribute 'read'

python - 用从 0 开始的唯一项目替换列表中的项目

python - py.test : Can multiple markers be applied at the test function level?

python - 使用循环连接 .wav 文件

python - Pylons Paster shell 无法在 ipython 中运行

python - 从标识符构建 json 树结构

python - 计算经常性客户

Python + Twisted + sqlanydb = abort()

python - windows下用python修改文件创建/访问/写入时间戳

python - 如何创建自定义 Django 过滤器标签