Unicode 如何使用GNU diff区分utf-16文件?

Unicode 如何使用GNU diff区分utf-16文件?,unicode,diff,gnu,Unicode,Diff,Gnu,GNU diff似乎不够聪明,无法检测和处理UTF-16文件,这让我感到惊讶。我是否缺少一个明显的命令行选项?有好的替代方案吗?来自GNU diff文档: 处理多字节和可变宽度 人物 diff、diff3和sdiff处理每条线 作为一个单字节字符串的输入 人物。这可能是处理不当 在某些情况下是多字节字符。 例如,当被要求忽略时 空格,diff不能正确忽略 多字节空格字符 此外,diff目前假定每个 字节为一列宽,并且 这种假设在某些情况下是不正确的 地区,例如使用UTF-8的地区 编码。这就导致

GNU diff似乎不够聪明,无法检测和处理UTF-16文件,这让我感到惊讶。我是否缺少一个明显的命令行选项?有好的替代方案吗?

来自GNU diff文档:

处理多字节和可变宽度 人物

diff、diff3和sdiff处理每条线 作为一个单字节字符串的输入 人物。这可能是处理不当 在某些情况下是多字节字符。 例如,当被要求忽略时 空格,diff不能正确忽略 多字节空格字符

此外,diff目前假定每个 字节为一列宽,并且 这种假设在某些情况下是不正确的 地区,例如使用UTF-8的地区 编码。这就导致了一些问题 的-y或--side-by-side选项 差别

这些问题需要解决 在不过度影响环境的情况下 公共事业在中国的表现 单字节环境

IBM GNU/Linux技术中心 国际化团队提出 要支持的一些修补程序 国际化差异 . 不幸的是,这些补丁是 不完整,且为旧版本 当然,还需要做更多的工作 在这个地区

我自己从来没有意识到这一点

如果一个非自由、非命令行的工具能够完成任务,那么Guiffy似乎可以完成任务,但仍然在寻找一个免费的命令行工具:


您可以用python构建一些具有优秀chardet的东西,然后将您的文件转换为UTF-8并将其发送到GNU diff


vimdiff
在这方面非常有效


我在阅读时发现了它。

在Python中,您可以使用difflib.HtmlDiff创建一个HTML表,显示两个行序列之间的差异,并且它似乎可以很好地处理Unicode字符串(当然,前提是您使用适当的编解码器读写它们)

安装支持UTF-16的,然后运行:

diff <(rg -N . file1.txt) <(rg -N . file2.txt)

diff使用重音符号或特殊字符时会出现异常补丁:

 diff --version
 diff (GNU diffutils) 3.6
 diff -Naur old_foo new_foo > foo.patch
无论比较的文件/目录是否在git文件夹中,都能正确处理重音符号或特殊字符

 git --version
 git version 2.17.1
 git diff --no-index old_foo new_foo > foo.patch

反映了UNIX工具将字符和字节视为相等的悠久传统,直到最近才开始出现一些问题。Subversion也是一种广泛使用的工具,它不能将UTF-16视为文本。我不知道UTF-16,但它应该能够很好地处理UTF-8。我想如果我遇到那么多麻烦,我会使用Perl,因为我知道它。:)
 git --version
 git version 2.17.1
 git diff --no-index old_foo new_foo > foo.patch