在Windows中识别unicode编码的文本文件的最好方法是什么?

我正在开发一个代码库,该代码库中有多个团队成员使用不同的编辑器(和默认设置)进行开发,从而散布了一些unicode编码文件。 我想通过查找所有的Unicode编码文件并将其转换回ANSI编码来清理我们的代码库。

如何完成这个任务的“发现”部分的任何想法将真正的赞赏。

请参阅“如何检测文本文件的字符编码?”或“如何可靠猜测编码?”

  • UTF-8可以通过验证来检测。 您也可以查找BOM EF BB BF ,但不要依赖它。
  • 可以通过查找BOM来检测UTF-16。
  • UTF-32可以通过验证或物料清单来检测。
  • 否则,假设ANSI代码页。

我们的代码库不包含任何非ASCII字符。 我将尝试grep在我们的代码库文件中的BOM。 感谢您的澄清。

那么这使得事情变得更简单。 没有非ASCII字符的UTF-8 ASCII。

Unicode是一个标准,它不是一个编码。 有很多实现Unicode的编码,包括UTF-8,UTF-16,UCS-2等。 任何这些编码转换成ASCII都完全取决于你的“不同的编辑器”使用什么编码。

一些编辑器在Unicode文件的开头插入BOM的字节顺序标记。 如果您的编辑人员这样做,您可以使用它们来检测编码。

ANSI是一个发布了数字字符数据编码的标准机构。 MS DOS和Windows支持的“ANSI”编码实际上是CP-1252,而不是ANSI标准。

你的代码库是否包含非ASCII字符? 使用Unicode编码而不是ANSI或CP-1252可能会有更好的兼容性。

如果您正在寻找一个编程解决方案, IsTextUnicode()可能是一个选项。

实际上,如果你想在windows中找到一个文件是否是unicode,只需在文件中运行findstr就可以得到一个你知道的字符串。

findstr / I / C:“SomeKnownString”file.txt

它会回来空的。 那么可以肯定的是,运行findstr上的一个字母或数字,你知道是在文件中:

FindStr / I / C:“P”file.txt

你可能会遇到很多事情,关键是他们会分开。 这是一个文件是unicode而不是ascii的标志。

希望这可以帮助。

这很难说,但是我会先找一个物料清单。 大多数编写Unicode文件的Windows程序都会发出物料清单。

如果这些文件存在于你的代码库中,那么他们可以编译。 你可能会问自己,你是否真的需要做这个“整理”。 如果你确实需要这样做,那么我会问如何处理这些文件的工具链发现他们的编码。 如果你知道,那么你将能够使用相同的诊断。