textract rtf编码丹麦字符

rjjhvcjd  于 4个月前  发布在  其他
关注(0)|答案(9)|浏览(81)
[test.rtf.zip](https://github.com/deanmalmgren/textract/files/907377/test.rtf.zip)

res = textract.process("test.rtf").decode(encoding='UTF-8')
assert "æøå" in res
FAIL

textract.process("test.rtf").decode(encoding='UTF-8')
-> test זרו


unrtf --text test.rtf

Translation from RTF performed by UnRTF, version 0.21.5

font table contains 0 fonts total

invalid font number 0


test æøå

9q78igpj

9q78igpj1#

看起来我们可以将unrtf和html解析器链接在一起,以正确处理编码:

vagrant@dev:/vagrant$ unrtf --html test.rtf > test.html
vagrant@dev:/vagrant$ textract test.html

//W3C//DTD HTML 4.01 Transitional//EN>

test æøå

我们显然希望比在textract内部运行textract更好地处理这个问题,但这似乎是一个非常合理的解决方案。想要提出一个PR吗?
似乎rtf_parser.Parser可以继承自ShellParser(如目前所示),并且还可以从html_parser.Parser继承,然后相应地调整rtf_parser.Parser.extract方法。

gwo2fgha

gwo2fgha2#

这看起来确实是一个合理的解决方案。让我今晚再看一下。它很可能只是因为我在unrtf中使用了有问题的--text选项。

twh00eeo

twh00eeo3#

看起来有一个新的版本的unrtf(webpage)。实际上,我在OSX上安装了最新版本,但--text选项在那里也无法使用。也许报告这个bug是个好主意...

vwkv1x7d

vwkv1x7d4#

是的,如文档中所记录的,我确实使用unrtf v.0.21.9得到了正确的文本输出。

mbjcgjjk

mbjcgjjk5#

当我在文件上运行unrtf时,我的输出看起来像:

vagrant@dev:/vagrant$ unrtf --text test.rtf
###  Translation from RTF performed by UnRTF, version 0.21.5 
### font table contains 70 fonts total

AUTHOR: Aske Mottelson
### creation date: 7 February 2017 
### revision date: 7 February 2017 
### total pages: 1
### total words: 1
### total chars: 8

-----------------
test ??R

这似乎表明unrtf在这个情况下没有正确处理编码。

iq3niunx

iq3niunx6#

嗯,这是真的,这里也是一样——也许是因为它被压缩了?如果我直接在文件上使用unrtf命令:
http://papirkriger.dk/test.rtf
unrtf --text test.rtf > out.txt
subl out.txt

###  Translation from RTF performed by UnRTF, version 0.21.9 
### font table contains 0 fonts total
### invalid font number 0

-----------------
test æøå
nr9pn0ug

nr9pn0ug7#

是的。我先解压了,但仍然只看到问号,而不是Unicode字符,这让我觉得我们的环境有些不同。你有没有设置一个shell环境变量,可能会告诉unrtf你的RTF文档中的编码有所不同?
另外,有趣的是,对我来说,unrtf的HTML输出似乎是正确的:

vagrant@dev:/vagrant$ unrtf test.rtf
<!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<!-- Translation from RTF performed by UnRTF, version 0.21.5 -->
<!--font table contains 70 fonts total-->
<meta name="author" content="Aske Mottelson">
<!--creation date: 7 February 2017 -->
<!--revision date: 7 February 2017 -->
<!--total pages: 1-->
<!--total words: 1-->
<!--total chars: 8-->
</head>
<body><font size="3"><font face="Cambria">test &aelig;&oslash;&aring;</font><br>
</font></body>
</html>
oiopk7p5

oiopk7p58#

不,我知道。但是出于某种原因,当我解压缩文件并取消压缩后,我得到了和你一样的(错误的)输出。
是的,unrtf html输出是正确的。非常奇怪。
可能是unrtf有问题,而不是textract,但我仍然不知道我们如何从RTF中获得正确的编码。

g0czyy6m

g0czyy6m9#

我已经在我的主机机器(OSX)上尝试过,以及在我的docker容器内,同样存在这个问题。

相关问题