【问题标题】:Difference between a uuencoded file using Java and Python使用 Java 和 Python 的 uuencoded 文件之间的区别
【发布时间】:2023-03-03 14:14:02
【问题描述】:

我必须将 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>)之后添加一个额外的字节

【问题讨论】:

  • 这两个字节的编码文本是否相同?它们是序言还是尾声?
  • 在名称标签 () 后添加一个额外字节,在结束标签 () 后添加一个字节
  • 请注意,整个 uu module 在 Python 3.7 中不到 200 行,所以如果你关心它做一些不同的事情,应该很容易修改

标签: java python uuencode


【解决方案1】:

这是一个换行问题。

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 换行符。

【讨论】:

  • 要确认这一点,你能看看十六进制转储吗?
猜你喜欢
  • 2011-11-18
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 2021-06-10
  • 2014-04-23
  • 2012-05-15
  • 2011-05-23
  • 1970-01-01
相关资源
最近更新 更多