首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用衍射工具区分.odt文件?kdiff3 diff输出不可读字符

如何用衍射工具区分.odt文件?kdiff3 diff输出不可读字符
EN

Stack Overflow用户
提问于 2015-10-31 05:06:58
回答 2查看 2.5K关注 0票数 3

在git中,我试图使用.gitattributes将.odt文件、libreofice编写器文件与difftool进行比较。通过遵循本指南:http://www-verimag.imag.fr/~moy/opendocument/,我创建了一个.gitattributes文件.gitattributes,如下所示:

代码语言:javascript
复制
*.ods diff=odf
*.odt diff=odf
*.odp diff=odf

*.ods difftool=odf
*.odt difftool=odf
*.odp difftool=odf

这使得git比较了.odt中的文本,然而,当git扩散工具启动kdiff3来比较.odt文件时,我得到了这个弹出错误:

代码语言:javascript
复制
Some input characters could not be converted to valid unicode.
You might be using the wrong codec. (e.g. UTF-8 for non UTF-8 files).
Don't save the result if unsure. Continue at your own risk.
Affected input files are in A, B.

...and文件中的所有字符都是笨手笨脚的。

哪里出了问题?我该怎么解决这个问题?

PS:

我不知道这是否重要,但我想我还没有配置“Diff.Tool”,因为每次我命令:

代码语言:javascript
复制
$ git difftool 

我得到了这个输出:

代码语言:javascript
复制
This message is displayed because 'diff.tool' is not configured.
See 'git difftool --tool-help' or 'git help config' for more details.
'git difftool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld kompare gvimdiff diffuse diffmerge ecmerge p4merge araxis bc codecompare emerge vimdiff

Viewing (1/1): 'diffexperiment.odt'
Launch 'kdiff3' [Y/n]:

这就是为什么kdiff3似乎不与odt2txt合作的原因吗?

编辑:我重新尝试使用Microsoft文档来完成这个任务,并获得了更多的这里

我玩过.kdiff3rc配置..。我添加的所有选项似乎都无法使不可读字符可读性更好。我将比较工具更改为vimdiff;当我在microsoft文档上使用git散乱工具时,vimdiff显示了以.xml结尾的文件列表,而不是不可读字符。

当我按下enter键进入其中一个显示的文件时:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
  " Browsing zipfile /tmp/4LMJbj_HI I am writing something here..docx                          |<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Override PartName
  " Select a file with cursor and press ENTER                                                  |="/_rels/.rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Overr
                                                                                               |ide PartName="/word/settings.xml" ContentType="application/vnd.openxmlformats-officedocument.w
  _rels/.rels                                                                                  |ordprocessingml.settings+xml"/><Override PartName="/word/_rels/document.xml.rels" ContentType=
  word/settings.xml                                                                            |"application/vnd.openxmlformats-package.relationships+xml"/><Override PartName="/word/fontTabl
  word/_rels/document.xml.rels                                                                 |e.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+x
  word/fontTable.xml                                                                           |ml"/><Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officed
  word/numbering.xml                                                                           |ocument.wordprocessingml.styles+xml"/><Override PartName="/word/document.xml" ContentType="app
  word/styles.xml                                                                              |lication/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/><Override Part
  word/document.xml                                                                            |Name="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-p
  docProps/app.xml                                                                             |roperties+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlfo
  docProps/core.xml                                                                            |rmats-package.core-properties+xml"/>
  [Content_Types].xml                                                                          |</Types>

我发布了一个关于这个问题的新问题,这里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-31 05:24:01

除了.gitattribute之外,您还需要配置odf的含义:

代码语言:javascript
复制
git config diff.odf.textconv odt2txt

您还需要odt2txt (从OpenDocument文本到纯文本的简单转换)在$PATH (Linux/Mac)%PATH% (Windows)中。

不需要配置difftool,因为默认情况下kdiff3就足够了。

但是kdiff3需要打开一个文本文件,因此需要odt2txt (为了首先将文档转换为文本文件)。

有关textconv的更多信息,请参见"执行二进制文件的文本差异":

有时,希望看到一些二进制文件的文本转换版本的差异。例如,字处理器文档可以转换为ASCII文本表示,并显示文本的差异。 即使这种转换丢失了一些信息,结果的差异对于人类查看还是有用的(但不能直接应用)。 textconv配置选项用于定义用于执行此类转换的程序。程序应该使用一个参数,即要转换的文件名,并在stdout上生成结果文本。 备注 文本转换通常是单向转换,这意味着textconv生成的差异不适合应用。 因此,只有git diffgit log系列命令(即logwhatchangedshow)将执行文本转换。 git format-patch将永远不会生成此输出。 如果您想向某人发送一个二进制文件的文本转换的差异(例如,因为它快速地传递了您所做的更改),那么除了可能发送的二进制差异之外,您还应该单独生成它,并将其作为注释发送。

OP千斤顶提到在评论中

在Linux上,我运行在我的主目录中:

代码语言:javascript
复制
$ git config diff.odf.textconv odt2txt

我安装了odt2txt ..。我假设odt2txt$PATH中,因为当我运行$ odt2txt时,我会得到关于odt2txt的信息。 然而,由于某种原因,所有这些东西似乎都不能使git diff .odt文件。 当我$ git diff fileone.odt filetwo.odt时,我仍然得到二进制文件fileone.odt和filetwo.odt的输出不同,而不是文本的区别。 不知道为什么不行。

票数 2
EN

Stack Overflow用户

发布于 2015-12-02 22:08:23

我猜kdiff3在你的案子里

一些输入字符无法转换为有效的unicode。你可能用错了编解码器。(例如,非UTF-8档案的UTF-8 )。

抱怨,因为它无法为特定字体找到某个字符的字形,也就是说,它不能绘制它(它们)。

kdiff3有许多配置选项,可以在~/.kdiff3rc配置文件中设置(例如这里)。我会玩一些与编码和字体有关的游戏。例如,从更改字体开始。

代码语言:javascript
复制
Font=Arial

顺便说一句,当你用编辑器打开这些odt文件时--哪种字体是可读的?

PS选项也可以在命令行中传递给kdiff3 : kdiff3 -cs "Option1=Val1“-cs "Option2=Val2”--cs .

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33448260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档