我第一次发帖-请对我放轻松。我想不出一个简洁的标题来概括这个问题。我似乎有一个编解码器问题。
我的基于 django 的网站调用一个子进程 (soffice) 将上传的文档转换为基本的文本文件,然后继续对文档中的文本进行一些处理。这在一段时间内工作得很好。在我的本地开发机器上,文件转换的单元测试仍然可以完美运行,就像完整的 django 应用程序一样,端到端。在生产服务器上,这一切都过去了,文件转换调用在 django 应用程序中不再工作,而从测试代码运行时它可以正常工作。这种行为变化似乎是运行常规服务器更新的结果。
args = ['soffice',
'--headless',
'--convert-to',
'txt:Text',
'--outdir',
outDir,
filePath]
subprocess.call(args)
fo = open(textFilePath, "r")
try:
docText = fo.read()
except:
print("Failed to read", textFilePath)
docText = None
我删除了一些错误检查以简化一点。
当我在生产服务器上将文件转换代码作为完整 django 应用程序的一部分运行时,我可以看到某些特殊字符(例如符号 §)变成了垃圾。但是,如果我在 django 之外的同一台机器上自己运行相同的文件转换代码,则这些符号不会损坏。如前所述,在我的开发机器上,它既可以独立运行,也可以在 django 中运行。两台机器之间的一个区别是我如何运行 django。在本地,它使用 django 的 runserver 命令运行。在生产机器上,它使用带有 apache 的 mod_wsgi。我看不出 django 或 mod_wsgi 怎么可能干扰 soffice 在子进程中所做的事情,但确实是这样。我在问题服务器上打开了一个 python shell 并运行与上面基本相同的代码,得到干净的文本,
真诚感谢任何帮助!