Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使git/java在ISO-8859-1 Linux系统上正确处理UTF-8文件名?_Linux_Git_Encoding_Utf 8_Filenames - Fatal编程技术网

如何使git/java在ISO-8859-1 Linux系统上正确处理UTF-8文件名?

如何使git/java在ISO-8859-1 Linux系统上正确处理UTF-8文件名?,linux,git,encoding,utf-8,filenames,Linux,Git,Encoding,Utf 8,Filenames,我有一个存储库,其中几个文件已从Windows签入,文件名中有unicode字符。例如AgêBean.java、GêBean.java、Lêgbean.java和XêviosoBean.java。 在CentOS 7系统上签出这些文件时,组成文件名的字节将被解释为ISO-8859-1。这破坏了java编译器之类的东西。例如,Java不会编译上述文件,因为类的unicode标识符,即“AgêBean”,与ISO-8859-1文件名不匹配,编译器将其视为“AgêBean.Java” 短而难看的解决

我有一个存储库,其中几个文件已从Windows签入,文件名中有unicode字符。例如AgêBean.java、GêBean.java、Lêgbean.java和XêviosoBean.java。 在CentOS 7系统上签出这些文件时,组成文件名的字节将被解释为ISO-8859-1。这破坏了java编译器之类的东西。例如,Java不会编译上述文件,因为类的unicode标识符,即“AgêBean”,与ISO-8859-1文件名不匹配,编译器将其视为“AgêBean.Java” 短而难看的解决方法是重命名文件,但是如果它们被签入,那么同样的问题也会出现在Windows端

那么有什么更好的解决方案呢?我可以想象一些,但我不知道如何去做,谷歌也没有帮助:

A) 重新配置我的CentOS文件系统,以便所有文件名都采用UTF-8(或UTF-16)编码

B) 在Linux上配置git以了解存储库中的文件名编码为UTF-8,但本地系统是ISO-8859-1,因此在签入或签出时需要转换所有文件名

C) 在Linux上配置java(以及终端和编辑器),以了解此目录下的文件名是UTF-8编码的,因此每个文件名都被正确解码


我对解决方案“A”最满意,但到目前为止我还没有找到如何做到这一点。我希望它不会被编译到Cent0s7(或RHEL8)内核中。

顺便说一句,我的linux系统上的命令
locale charmap
返回“ISO-8859-1”,我正在寻找一种方法,通过/etc下的设置来改变它,但我不相信这是一种有效的方法。
你的结论也是这样的
那是什么文件系统?为什么“文件系统”关心文件名编码?文件系统只关心以零结尾的字符串,内核不关心unicode。我会责怪:
当这些文件被签出时
我会责怪“签出”部分。你怎么结账?像导出LC\u ALL=C然后签出这样的东西怎么样
我正在寻找一种方法,通过/etc下的设置来改变这一点,
请参见
/etc/locale.conf
。请参见(由于您发现的原因,答案是“否”)。同时:Linux已经假设并使用UTF-8(在系统调用接口)。不过,它不会尝试对字节字符串进行编码和解码,除非它确实必须这样做,例如在处理NTFS卷时。您看到的问题是,文件中的数据也有编码;Git在默认情况下从不涉及这些内容,尽管Git现在有一个
工作树编码属性(q.v.)。我编辑了我的bash配置文件,到目前为止,添加了导出
export LANG=en_US.UTF-8
export LANGUAGE=“en_US.UTF-8”
似乎正在工作。编译器不再抱怨,但我没有尝试用UTF-8编码重新检查名称。我怀疑(但尚未证明)当LANG=en_US.UTF-8时,大多数应用程序都能正确解码ISO-8858-1。