Python3.x:将utf-8字符串写入二进制txt文件时出现问题

Python3.x:将utf-8字符串写入二进制txt文件时出现问题,python,binary,Python,Binary,我目前正在努力学习“艰苦学习Python”,并试图改变一个练习。 目标:在一个新的.txt文件中编写这些语言的二进制等价物 import sys script, encoding, error = sys.argv def main(language_file, encoding, errors): line = language_file.readline() if line: print_line(line, encoding, errors)

我目前正在努力学习“艰苦学习Python”,并试图改变一个练习。 目标:在一个新的.txt文件中编写这些语言的二进制等价物

import sys
script, encoding, error = sys.argv

def main(language_file, encoding, errors):
    line = language_file.readline()

    if line:
        print_line(line, encoding, errors)
        return main(language_file, encoding, errors)

def print_line(line, encoding, errors):
    next_lang = line.strip()
    raw_bytes = next_lang.encode(encoding, errors=errors)
    cooked_string = raw_bytes.decode(encoding, errors=errors)
    bin_file.write(raw_bytes + "\n".encode("utf-8"))
    print(raw_bytes, "<===>", cooked_string)

languages = open("languages.txt", encoding="utf-8")
bin_file = open("bin_languages.txt", "wb")
main(languages, encoding, error)
导入系统 脚本,编码,错误=sys.argv def main(语言文件、编码、错误): line=language\u file.readline() 如果行: 打印行(行、编码、错误) 返回main(语言文件、编码、错误) def打印行(行、编码、错误): next_lang=line.strip() 原始字节=下一个语言编码(编码,错误=错误) 煮熟的字符串=原始字节。解码(编码,错误=错误) bin\u file.write(原始字节+“\n.”编码(“utf-8”)) 打印(原始字节、“、熟字符串) 语言=打开(“languages.txt”,encoding=“utf-8”) bin_file=open(“bin_languages.txt”、“wb”) 主(语言、编码、错误) 这段代码的大部分来自学习示例,这就是为什么出于理解的目的,需要将原始_字节编码/解码为熟的_字符串,然后再进行编码/解码

不幸的是,输出文件包含与原始文件相同的内容。我的方法不可能吗?
谢谢

为什么你要再次解码,然后编码成UTF-8?@MartijnPieters:你能再给我解释一下吗?在shell中运行脚本时,会得到类似“b'Ti\xe1\xba\xbfng Vi\xe1\xbb\x87t”的结果ếng Việt”。现在,我想按显示方式将左侧(定义为原始字节)写入文件。谢谢我认为这种方式只是为了展示如何做到这一点。除了文件写入部分以外的所有内容都是书中的1到1。@OferSadan:不,我想将原始字节写入一个文件。原始文件中已存在该字符串。作者尝试tp演示只是为了理解如何解码和编码。请注意,
raw_bytes
显示为Python语法,目的是方便调试。二进制数据使用转义序列显示,转义序列用于任何不能表示为可打印ASCII字符的字节。您在文件中找不到文本
Ti\xe1\xba\xbfng Vi\xe1\xbb\x87t'
数据,它将为ASCII码点
T
(十六进制值54)和
i
(69)写入字节,然后为十六进制值E1和BA以及BF等写入字节。抱歉,由于
“\n”.encode('utf-8'),我误读了您正在写入文件的内容
expression,读得有点太快了。您可以只使用
b'\n'
而不使用编码。您仍在编写UTF-8数据。UTF-8是文本的二进制编码,无论是以文本模式用UTF-8编码打开文件,还是手动编码并将字节写入二进制文件。无论您是手动编码还是让Python为您编码,结果都是一样的。如果您从UTF-8解码,然后再次编码到UTF-8,那么是的,您将获得相同的数据。这就是编码的本质。