【发布时间】:2016-10-04 14:03:11
【问题描述】:
我正在尝试让 git 将 UTF-16 识别为文本,以允许我本地区分和修补文本,但我无法让 textconv 参数正常工作。
我可以手动调用
iconv -f utf-16 -t utf-8 some-utf-16-file.rc
一切都很好。但是如果我配置我的 .gitconfig 如下
[diff "utf16"]
textconv = "iconv -f utf-16le -t utf-8"
还有我的 .git 属性:
# Custom for MFC
*.rc text eol=crlf diff=utf16
但是,如果我运行git diff,则会显示以下内容:
iconv: C:/Users/Mahmoud/AppData/Local/Temp/IjLBZ8_OemKey.rc:104:1: incomplete character or shift sequence
使用 procmon 我能够在创建此过程时对其进行跟踪:
sh -c "iconv.exe -f utf-16le -t utf-8 \"$@\"" "iconv.exe -f utf-16le -t utf-8" C:/Users/Mahmoud/AppData/Local/Temp/JLOkVa_OemKey.rc
...我实际上可以正常运行(但在实际文件上)。
有什么想法吗?
(请注意,我知道让 git 与 UTF-16 一起工作的各种解决方案。我特别想解决这个问题,即为什么 iconv 本身可以工作,但在被 git 调用时它不起作用。此外,此错误最初是在尝试“重复”问题中的链接解决方案之一时遇到的。谢谢大家。)
【问题讨论】:
-
@paulsm4 我的问题实际上是关于让 git 和 iconv 工作得很好,而不是让 git 与 UTF-16 一起工作;不过谢谢!
-
不确定 - 这可能与 iconv.exe 是二进制文件有关吗?
-
请记住 - 从 DOS/Windows“命令行”中,有一大堆不同的参与者参与其中:包括 Cygwin 和 Windows。请阅读我引用的链接:“GNU diff 并不真正关心 unicode,因此当您使用 diff --text 时,它只会区分并输出文本。问题是您使用的终端无法处理 UTF发出的 -16 (与作为 ASCII 字符的差异标记结合)。”请阅读多种不同的解决方法。
-
在将该文件提供给 iconv 之前,git 会重写行尾字符(这会使 utf-16 混乱)吗?