Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python汇集了ascii和utf-8内容_Python_Encoding_Codec - Fatal编程技术网

python汇集了ascii和utf-8内容

python汇集了ascii和utf-8内容,python,encoding,codec,Python,Encoding,Codec,我有一个包含英语单词的文本文件“words.txt”。让我们假设它只包含三个词:“一”、“二”和“三”。 我还有三个文件:one.dat、two.dat和three.dat。这些文件中的每一个都包含表示相应单词转录的二进制数据。格式为UTF-8。 我想要什么:我想要将“words.txt”和所有这些.dat组合成一个可以打印的文档。所以我需要这样的东西(让我们把它命名为final.dat): 一[万] 二[图:] 三[?ri:] 但是用正确的“th”符号代替“?”:) 最重要的是我必须能够将“f

我有一个包含英语单词的文本文件“words.txt”。让我们假设它只包含三个词:“一”、“二”和“三”。 我还有三个文件:one.dat、two.dat和three.dat。这些文件中的每一个都包含表示相应单词转录的二进制数据。格式为UTF-8。 我想要什么:我想要将“words.txt”和所有这些.dat组合成一个可以打印的文档。所以我需要这样的东西(让我们把它命名为final.dat):

一[万] 二[图:] 三[?ri:]

但是用正确的“th”符号代替“?”:)

最重要的是我必须能够将“final.dat”加载到MSWord或Writer中并打印出来


我打算用python来完成它,但我真的被所有这些“编解码器”、“编码”、“解码”等等困住了…

在Python2.x中,读取UTF-8文件可以使用

open('one.dat').read().decode('utf-8')

两者都返回Python
unicode
对象。如果要将
str
(ASCII/二进制字符串)
s
转换为
unicode
,请使用
s.decode('utf-8')

在Python3.x中,只需

open('one.dat').read()

其思想是,
str
(Py2.x)或
bytes
(Py3.x)对象只包含某个编码中字符串的二进制表示,而不指定该编码;
decode
方法将其转换为正确的Unicode字符串(在2.x中为
Unicode
,在3.x中为
str


(顺便说一句,UTF-8不是“二进制数据”,它只是非ASCII编码的文本。)

内置名称
字节
也存在于2.x(至少2.6)中。这是
str
的别名。谢谢您的详细回答。但我还有两个问题。1) 您确定我必须使用“s.decode”而不是“s.encode”将ascii字符串转换为unicode吗?2) 在我将它们全部设置为“unicode”并尝试写入文件后,它崩溃了:UnicodeEncodeError:“ascii”编解码器无法对位置0处的字符u'\u0259'进行编码:序号不在范围(128)内(我使用f3.write(unicode_字符串))@Nick:解码正在将某些内容转换为unicode;编码是将Unicode转换为特定格式,如UTF-8或ASCII。因此,在写入数据之前,您可能需要进行
编码。使用
encoding
kwarg来
open
/
编解码器。在打开输出文件时打开
,然后只向其写入
unicode
对象。我更喜欢将
encoding='utf-8'
参数放在
open
中的解决方案,而不是手动处理二进制数据的解决方案。在过去几年中,我只能想到一种情况,我必须以二进制形式读取文件,因为它包含的数据编码因行而异。手工解码和编码是一种可怕的痛苦。流编码是一种干净明了的方法。如果它们有二进制数据,那么就没有UTF-8。反之亦然。UTF-8和ASCII一样都不是二进制数据。两者都是文本数据。
open('one.dat').read()
open('one.dat', encoding='utf-8').read()