35

我有一个奇怪的问题:在我的 HTML/PHP 代码的某个地方,有一个隐藏的、不可见的字符,我似乎无法摆脱它。通过从 Firebug 复制并转换它,我将其标识为“零宽度不间断空间”。它在我的网站中显示为非空文本节点,并导致严重的布局问题。

问题是,我无法摆脱它。即使打开 Invisibles (duh),我也无法在我的文件中看到它。我似乎找不到它,似乎没有任何搜索工具可以找到它。我在可能的地方重写了我的代码,但它似乎在某个框架文件中更深的地方。

我怎样才能通过字符码跨文件或类似的东西找到字符?我对不同的工具持开放态度,但它们必须在 Mac OS X 上工作。

4

5 回答 5

40

您无法在编辑器中获得该字符,因为您无法在文本编辑器中找到它。#FEFF 或#FFFE 是所谓的字节顺序标记。它们是 Microsoft 的一项发明,用于在 Unicode 文件中说明多字节字符的存储顺序。

要摆脱它,请告诉您的编辑器将文件保存为 ANSI/ISO-8859 或不带 BOM的 Unicode 。如果您的编辑器不能这样做,您要么必须切换编辑器(很遗憾),要么使用某种截断工具,例如,允许您查看文件真实外观的十六进制编辑器。

在谷歌搜索中,TextWrangler 似乎具有“UTF-8,无 BOM”模式。否则,如果您对终端感到满意,可以使用 Vim:

:set nobomb

并保存文件。快!

字符始终是文本文件中的第一个字符。正如我所提到的,支持 BOM 的编辑器根本不会向您展示它。

于 2009-07-01T07:59:28.760 回答
13

如果您使用的是 Textmate 并且问题出在 UTF-8 文件中:

  1. 打开文件
  2. 文件 > 使用编码重新打开 > ISO-8859-1 (Latin1)
  3. 您应该能够看到并删除文件中的第一个字符
  4. 文件 > 保存
  5. 文件 > 使用编码重新打开 > UTF8
  6. 文件 > 保存

它每次都对我有用。

于 2010-06-21T14:52:09.490 回答
7

这是一个字节顺序标记。在 Mac OS X 下:打开终端窗口,转到您的来源并输入:

grep -rn $'\xFEFF' *

它将显示包含 BOM 的行号和文件名。

于 2009-07-01T08:00:15.593 回答
3

在 Notepad++ 中,有一个选项可以显示所有字符。从顶部菜单:

查看 -> 显示符号 -> 显示所有字符

于 2009-07-01T07:33:23.230 回答
2

我不是 Mac 用户,但我的一般建议是:当所有其他方法都失败时,请使用hex editor。在这种情况下非常有用。

请参阅WikiPedia 中的“十六进制编辑器的比较”

于 2009-07-01T07:55:12.310 回答