我正在开发一个代码库,由于多个团队成员使用不同的编辑器(以及默认设置)进行开发,因此分散了一些unicode编码文件。我想通过查找所有unicode编码文件并将它们转换回ANSI编码来清理我们的代码库。
任何有关如何完成此任务的“发现”部分的想法都将得到真正的体会。
答案 0 :(得分:5)
请参阅“How to detect the character encoding of a text-file?”或“How to reliably guess the encoding [...]?”
EF BB BF
,但不要依赖它。我们的代码库不包含任何内容 非ASCII字符。我会尝试grep 对于我们的代码库中的文件中的BOM。 谢谢你的澄清。
这样可以简化 lot 。没有非ASCII字符的UTF-8是 ASCII。
答案 1 :(得分:4)
Unicode是标准,它不是编码。有许多编码实现Unicode,包括UTF-8,UTF-16,UCS-2等。将这些编码中的任何一种转换为ASCII完全取决于“不同编辑者”使用的编码方式。
某些编辑器在Unicode文件的开头插入BOM的字节顺序标记。如果你的编辑那样做,你可以用它们来检测编码。
ANSI是一个标准组织,已经发布了几种数字字符数据编码。 MS DOS使用并在Windows中支持的“ANSI”编码实际上是CP-1252,而不是ANSI标准。
您的代码库是否包含非ASCII字符?使用Unicode编码而不是ANSI编码或CP-1252可能具有更好的兼容性。
答案 2 :(得分:2)
实际上,如果你想在windows中找到一个文件是unicode,只需在文件上运行findstr,找到你知道的字符串。
findstr / I / C:“SomeKnownString”file.txt
它会变回空洞。然后,确保在您知道的文件或数字上运行findstr:
FindStr / I / C:“P”file.txt
你可能会遇到很多事情,关键是他们会分开。这是文件是unicode而不是ascii的标志。
希望这有帮助。
答案 3 :(得分:1)
如果您正在寻找程序化解决方案,IsTextUnicode()可能是一种选择。
答案 4 :(得分:0)
这很难说,但我首先要寻找一个BOM。大多数编写Unicode文件的Windows程序会发出BOM。
如果你的代码库中存在这些文件,可能是他们编译的。您可能会问自己是否真的需要这样做“整理”。如果您确实需要这样做,那么我会问处理这些文件的工具链如何发现它们的编码。如果您知道,那么您将能够使用相同的诊断。