2011-01-12 103 views
13

由于多个团队成员使用不同的编辑器(和默认设置)进行开发,因此我正在开发一个分布有一些unicode编码文件的代码库。我想通过查找所有的Unicode编码文件并将它们转换回ANSI编码来清理我们的代码库。在Windows中识别unicode编码文本文件的最佳方式是什么?

如何完成此任务的“发现”部分的任何想法都将得到真正的赞赏。

+0

你使用什么编程语言?我想一个小的VBS脚本可以满足这个任务。 – LostInTheCode 2011-01-12 18:49:42

+0

我们正在使用c#,但是我正在寻找更多可用于搜索unicode编码文件的工具。你在文本文件中寻找什么来将它们识别为unicode? – HOCA 2011-01-12 19:04:47

回答

5

参见​​或“How to reliably guess the encoding [...]?”

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

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

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

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可能会有更好的兼容性。

+0

我们的代码库不包含任何非ASCII字符。我将尝试在我们的代码库中查找文件中的BOM。感谢您的澄清。 – HOCA 2011-01-12 20:44:54

+2

没有单一的Windows 8位(又名ANSI)编码,有很多,比如CP1251,CP1252,CP1253等。也看到这个问题:http://stackoverflow.com/questions/3864240/default-code-page-for-each-language-version-of-windows – dalle 2011-01-12 22:12:11

+0

@HOCA,如果你的文件只包含ASCII,它已经在UTF -8并且不需要“转换”。 – 2011-01-13 18:00:27

0

这很难说,但我首先寻找BOM。大多数编写Unicode文件的Windows程序都会发布BOM。

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

1

实际上,如果你想在windows中找到一个文件是unicode的话,只需在文件中运行findstr就可以知道它在那里。

findstr/I/C:“SomeKnownString”文件。txt

它会回来空。然后是一个字母或数字,你知道肯定,运行FINDSTR在文件中:

FINDSTR/I/C:“P” file.txt的

你可能会得到许多事件和关键的是,他们将被分开。这是一个文件是unicode而不是ascii的标志。

希望这会有所帮助。

相关问题