使用 Java 和 Python 的 uuencoded 文件之间的区别
Difference between a uuencoded file using Java and Python
我必须将 Python 代码转换为 Java 代码,但我遇到了 uuencoding 问题。
Python函数:
import uu
uu.encode("input_file", "output_file")
Java函数:
MimeUtility.encode(new FileOutputStream(output_file_path), "uuencode");
stream.write(Files.readAllBytes(input_file));
这些函数的结果应该是相同的uuencoded文件,但实际上不是(它们几乎相同)。 Java uuencoded 文件比 Python.
大 2 个字节
问题出在哪里?
编辑:
在名称标记 (<begin><mode><name>
) 和结束标记 (<end>
) 之后添加一个额外字节
这是一个换行问题。
MIME 一直被定义为使用 CR+LF 作为终止符,但如果使用 Python 等原始编码,它在 Linux 上仅使用 LF。参见 RFC2045
# https://github.com/python/cpython/blob/2.7/Lib/uu.py
79 out_file.write('begin %o %s\n' % ((mode&0777),name))
您应该将 os.linesep
系统变量设置为 '\r\n'
以便写入 CR+LF 换行符。
我必须将 Python 代码转换为 Java 代码,但我遇到了 uuencoding 问题。
Python函数:
import uu
uu.encode("input_file", "output_file")
Java函数:
MimeUtility.encode(new FileOutputStream(output_file_path), "uuencode");
stream.write(Files.readAllBytes(input_file));
这些函数的结果应该是相同的uuencoded文件,但实际上不是(它们几乎相同)。 Java uuencoded 文件比 Python.
大 2 个字节问题出在哪里?
编辑:
在名称标记 (<begin><mode><name>
) 和结束标记 (<end>
) 之后添加一个额外字节
这是一个换行问题。
MIME 一直被定义为使用 CR+LF 作为终止符,但如果使用 Python 等原始编码,它在 Linux 上仅使用 LF。参见 RFC2045
# https://github.com/python/cpython/blob/2.7/Lib/uu.py
79 out_file.write('begin %o %s\n' % ((mode&0777),name))
您应该将 os.linesep
系统变量设置为 '\r\n'
以便写入 CR+LF 换行符。