Unicode 如何使用GNU diff区分utf-16文件?
GNU diff似乎不够聪明,无法检测和处理UTF-16文件,这让我感到惊讶。我是否缺少一个明显的命令行选项?有好的替代方案吗?来自GNU diff文档: 处理多字节和可变宽度 人物 diff、diff3和sdiff处理每条线 作为一个单字节字符串的输入 人物。这可能是处理不当 在某些情况下是多字节字符。 例如,当被要求忽略时 空格,diff不能正确忽略 多字节空格字符 此外,diff目前假定每个 字节为一列宽,并且 这种假设在某些情况下是不正确的 地区,例如使用UTF-8的地区 编码。这就导致了一些问题 的-y或--side-by-side选项 差别 这些问题需要解决 在不过度影响环境的情况下 公共事业在中国的表现 单字节环境 IBM GNU/Linux技术中心 国际化团队提出 要支持的一些修补程序 国际化差异 . 不幸的是,这些补丁是 不完整,且为旧版本 当然,还需要做更多的工作 在这个地区 我自己从来没有意识到这一点 如果一个非自由、非命令行的工具能够完成任务,那么Guiffy似乎可以完成任务,但仍然在寻找一个免费的命令行工具:Unicode 如何使用GNU diff区分utf-16文件?,unicode,diff,gnu,Unicode,Diff,Gnu,GNU diff似乎不够聪明,无法检测和处理UTF-16文件,这让我感到惊讶。我是否缺少一个明显的命令行选项?有好的替代方案吗?来自GNU diff文档: 处理多字节和可变宽度 人物 diff、diff3和sdiff处理每条线 作为一个单字节字符串的输入 人物。这可能是处理不当 在某些情况下是多字节字符。 例如,当被要求忽略时 空格,diff不能正确忽略 多字节空格字符 此外,diff目前假定每个 字节为一列宽,并且 这种假设在某些情况下是不正确的 地区,例如使用UTF-8的地区 编码。这就导致
您可以用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