以未知编码写入数据

Write data in unknown encoding

是否可以将数据写入未知编码的文件? 我无法解码电子邮件 headers,例如 message-id,因为如果我使用处理程序忽略或替换 https://docs.python.org/3/library/codecs.html#error-handlers non-RFC header 将是 RFC-compliant 并且反垃圾邮件不会增加垃圾邮件分数。

我从 milter 协议中的后缀获取字符串。我无法为反垃圾邮件保存此数据不变,引发 UnicodeError。示例:

cat 存档文件

#!/usr/bin/python3

import sys
fh = open('test', 'w+')
fh.write(sys.argv[1])
echo žlutý | xargs ./savefile && cat test
žlutý
echo žlutý | iconv -f UTF-8 -t ISO8859-2 - | xargs ./savefile 
Traceback (most recent call last):
  File "/root/./savefile", line 5, in <module>
    fh.write(sys.argv[1])
UnicodeEncodeError: 'utf-8' codec can't encode character '\udcbe' in position 0: surrogates not allowed

输入的可能是很多未知的编码。 python2 中的 Milter 应用程序运行良好。

然后你想处理原始 bytes,而不是字符串。 open 二进制模式的输出文件。请注意:

sys.argv

..

Note: On Unix, command line arguments are passed by bytes from OS. Python decodes them with filesystem encoding and “surrogateescape” error handler. When you need original bytes, you can get it by [os.fsencode(arg) for arg in sys.argv].

https://docs.python.org/3/library/sys.html#sys.argv

所以:

import sys
import os

with open('test', 'wb+') as fh:
    fh.write(os.fsencode(sys.argv[1]))