【问题标题】:Stop GitHub from converting my Windows 1252 .txt files into UTF-8阻止 GitHub 将我的 Windows 1252 .txt 文件转换为 UTF-8
【发布时间】:2019-03-12 09:55:30
【问题描述】:

“我们检测到文件编码为 ISO-8859-1。当您提交更改时,我们会将其转码为 UTF-8”

这是我尝试上传 Windows 1252 .txt 文件时 GitHub 显示的内容。

结果:UTF-8 无法识别的所有字符都显示为 �

我的 ATOM 编辑器已成功使用 Windows 1252 作为默认设置,但分阶段更改窗口显示的是 �。

如何阻止 GitHub 这样做?

【问题讨论】:

  • 文件为 win-1252 是否有特定原因?因为如果没有,您可能应该在文本文件上使用更通用的 utf-8 编码。 Windows 8 位编码的问题在于,当您在设置为不同语言的计算机上打开特殊字符时,它们看起来会有所不同,并且 无法 检测文件的原始预期编码是什么。
  • 是的,因为我的文件中有很多字符,例如 Š/š 和 Ž/ž,UTF-8 不支持这些字符
  • 其实utf-8支持all个unicode字符。你只需要正确转换它。
  • 问题似乎更多是转换为 UTF-8 时被检测为 ISO-8859-1 的文件之一; Windows-1252 是 ISO-8859-1 的超集,Š/š 和 Ž/ž 不是 ISO-8859-1 的一部分,而是 Windows-1252 的一部分。因此,如果在转换为 UTF-8 时假定 ISO-8859-1,这些映射到 � 的事实是“预期的”。
  • @Deduplicator 我知道。但是 utf-8 有严格的位规则,它必须遵循才能有效,所以它仍然很容易检测。同时,除了基于语言的启发式之外,没有办法区分 8 位扩展 ascii 编码的 >0x80 内容。

标签: github encoding utf-8 windows-1252


【解决方案1】:

除了将.gitattributes encoding directive设置为utf-8,还可以将现有文件转换为utf-8,as in here:

#!/bin/sh

find . -type f -print | while read f; do
        mv -i "$f" "$f.recode.$$"
        iconv -f iso-8859-1 -t utf-8 < "$f.recode.$$" > "$f"
        rm -f "$f.recode.$$"
done

您可以调整脚本以将其限制为仅文件的子集。
只有推送 utf-8 文件,才能确保在 GitHub repo repo 页面中看到正确的字符。

【讨论】:

    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2021-04-09
    相关资源
    最近更新 更多