Unicode 如何清除不可见字符的源代码文件?

Unicode 如何清除不可见字符的源代码文件?,unicode,character,Unicode,Character,我有一个奇怪的问题:在我的HTML/PHP代码中,有一个隐藏的、不可见的字符,我似乎无法摆脱。通过从Firebug复制并转换它,我将其标识为或“零宽度无中断空间”。它在我的网站中显示为非空文本节点,并导致严重的布局问题 问题是,我无法摆脱它。即使在打开“不可见”时,我也无法在文件中看到它(duh)。我似乎找不到它,似乎没有搜索工具能找到它。我在可能的地方重写了我的代码,但它似乎在某个框架文件的某个更深的地方 我如何在文件或类似文件中通过字符码查找字符?我对不同的工具持开放态度,但它

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

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


我如何在文件或类似文件中通过字符码查找字符?我对不同的工具持开放态度,但它们必须在Mac OS X上工作。

在记事本++中,有一个显示所有字符的选项。从顶部菜单:


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

我不是Mac用户,但我的一般建议是:当所有其他操作都失败时,使用十六进制编辑器。在这种情况下非常有用


请参阅。

您无法在编辑器中获取该字符,因为您无法在文本编辑器中找到它#FEFF或#FFFE是所谓的。它们是微软的一项发明,用于在Unicode文件中进行识别,多字节字符按顺序存储

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

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

:set nobomb
然后保存文件。普雷斯托

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

这是一个问题。在Mac OS X:打开终端窗口下,转到源并键入:

grep -rn $'\xFEFF' *

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

如果您使用的是Textmate,而问题出现在UTF-8文件中:

  • 打开文件
  • 文件>使用编码重新打开>ISO-8859-1(拉丁语1)
  • 您应该能够看到并删除文件中的第一个字符
  • 文件>保存
  • 文件>使用编码重新打开>UTF8
  • 文件>保存

  • 它每次都对我有用。

    如前所述,我更喜欢Mac OS X(或UNIX)工具。是的,我错过了。。。我想我看到了一些可以使用交叉的地方。不是很好的解决方案。顺便说一句:记事本++有一个选项可以保存没有BOM表的Unicode文件。以防你要切换到Windows;-)我使用wine在ubuntu上运行notepad++。我不知道wine是否在OS X上运行。不过notepad++非常棒。我不认为notepad plus会显示“无空格”和其他空白字符,尽管它会显示回车和换行符。。。我认为您必须切换编码,这在我之前看到的公认答案中有解释,但它通常在页面顶部呈现为垃圾。当它在页面的中间时看起来很难找到……?无论如何,谢谢!:)它可以发生在页面的中间,当使用PHP的包含BOM启动文件的包含语句时。否则它通常不会出现(尽管它是一个标准的Unicode字符,可以这样使用)。如果您使用Altova XMLSpy编辑HTML/PHP代码,则可以在“工具/选项”菜单的“编码”选项卡页上找到关闭BOM的选项。XMLSpy可以在找到BOM时保留BOM,或者在BOM不存在时将其添加到文件中。它没有删除BOM的选项。哦,糟糕。我怀疑您是否在Mac OS X上使用XMLSpy,尽管可以通过使用“Parallels for Mac”虚拟化将其安装在Mac OS X上。因为几乎可以肯定它是文件的前两个字节,所以问题是如何将其删除。我对awk不是很有经验,但删除文件的前两个字节应该是一行程序。事实上,不难找到重复的问题来告诉您如何做
    awk'NR==1{sub(/^\357\273\277/,“”)}1'file>newfile
    即使在工具请求问题的答案中,这一个也不是特别有用,因为它甚至不建议解决方案或工具,只有一类tools.vi或vim将显示任何非EOL字符。我很确定会这样做。编辑:由于赤裸裸的网站似乎又宕机了。不要太自责。如果一个布局因为零宽度、非中断空间而中断,那么渲染器要么误解了sero宽度,要么误解了非中断部分。我想这是有争议的。不间断的空格连接了两个适当的空白字符,所以我猜它应该呈现一些东西。在两个全宽无边距的div之间发生了挤压,这就是为什么它出现得非常突出的原因。我宁愿责怪微软从一开始就发明了BOM整理了一些简单的答案并进行了编辑。在没有明确工具请求的情况下查看主题