GNU diff似乎不够智能,无法检测和处理UTF-16文件,这让我感到惊讶。我错过了一个明显的命令行选项吗?有没有好的选择?
答案 0 :(得分:11)
vimdiff
非常适合这个目的。
我在阅读this StackOverflow answer时找到了它。
答案 1 :(得分:8)
来自GNU diff文档:
处理多字节和变化宽度 字符
diff,diff3和sdiff处理每一行 输入作为unibyte字符串 字符。这可能是错误的 在某些情况下多字节字符。 例如,当被要求忽略时 空格,差异不正确地忽略 多字节空格字符。
此外,diff目前假定每个 byte是一列宽,这个 某些人的假设不正确 locales,例如,使用UTF-8的语言环境 编码。这会导致问题 -y或-side-by-side选项 分差
这些问题需要解决 没有过度影响 公用事业的表现 unibyte环境。
IBM GNU / Linux技术中心 国际化团队提出了建议 一些补丁要支持 国际化差异 http://oss.software.ibm.com/developer/opensource/linux/patches/i18n/diffutils-2.7.2-i18n-0.1.patch.gz。 不幸的是,这些补丁是 不完整,是旧版本 差异,所以需要做更多的工作 在这方面。
我从未意识到自己。
如果一个非自由的非命令行工具可以完成这项工作,看起来Guiffy可以胜任这项工作,仍在寻找免费软件命令行工具:
答案 2 :(得分:1)
安装支持UTF-16的https://help.shopify.com/en/api/reference/customers/customer#create,然后运行:
ripgrep
-E
支持以UTF-8以外的文本编码搜索文件,例如UTF-16,latin-1,GBK,EUC-JP,Shift_JIS等。 (提供了一些对自动检测UTF-16的支持。必须使用--encoding flag.
/ {{1}}特别指定其他文本编码)
答案 3 :(得分:1)
Malforms补丁:
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
答案 4 :(得分:0)
您可以使用优秀的chardet在python中构建一些东西,然后将您的文件转换为UTF-8并将其发送到GNU diff?
答案 5 :(得分:0)
在Python中,您可以使用difflib.HtmlDiff来创建一个HTML表,该表显示两个行序列之间的差异,并且它似乎可以正常使用Unicode字符串(当然,前提是您使用相应的方法读取和写入它们)编解码器)。
>>> hd = difflib.HtmlDiff()
>>> htmldiff = hd.make_file(codecs.open('file1', 'r', 'utf-16').readlines(), codecs.open('file2', 'r', 'utf-16').readlines())
>>> print >> codecs.open('diff.html', 'w', 'utf-16'), htmldiff