【问题标题】:How can I clean source code files of invisible characters?如何清理不可见字符的源代码文件?
【发布时间】:2010-11-07 06:04:52
【问题描述】:

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

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

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

【问题讨论】:

  • vi 或 vim 将显示任何非 EOL 字符。
  • 我很确定Textwrangler 会做到的。编辑:VersionTracker link 因为 Bare Bones 网站似乎又关闭了。
  • 不要太自责。如果布局由于零宽度、非中断空间而中断,则渲染器会误解 sero-width 或非中断部分。
  • 我想这值得商榷。不间断空格连接了两个正确的空白字符,所以它应该呈现我猜想的东西。并且恰好在两个全宽、无边距 DIV 之间挤压了一些东西,这就是它非常突出的原因。我宁愿指责微软一开始就发明了 BOM。 ;-)
  • 清理了一些简单的答案并进行了编辑。在没有明确的工具请求的情况下看起来很切题

标签: unicode character


【解决方案1】:

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

要删除它,请告诉您的编辑器将文件保存为 ANSI/ISO-8859 或 Unicode无 BOM。如果你的编辑器不能这样做,你要么必须切换编辑器(很遗憾),要么使用某种截断工具,例如,一个十六进制编辑器,它可以让你看到文件真的看起来。

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

:set nobomb

并保存文件。快!

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

【讨论】:

  • 我之前看到过,但它通常呈现为页面顶部的垃圾。当它在页面中间时似乎更难找到......?不管怎样,谢谢! :)
  • 它可能出现在页面中间,当您使用 PHP 的 include 语句和 BOM 启动的文件进行包含时。否则它通常不应该出现(尽管它一个标准的Unicode字符并且可以这样使用)。
  • 如果您正在使用 Altova XMLSpy 编辑 HTML/PHP 代码,则可以在菜单“工具/选项”、标签页“编码”中找到关闭 BOM 的选项。 XMLSpy 可以在找到 BOM 时保留它,或者在它尚不存在时将其添加到文件中。它没有删除 BOM 的选项。
  • 哦,哎呀。我怀疑您是否在 Mac OS X 上使用 XMLSpy,尽管它可以通过使用“Parallels for Mac”虚拟化安装在 Mac OS X 上。
【解决方案2】:

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

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

它每次都对我有用。

【讨论】:

    【解决方案3】:

    这是一个byte-order mark。在 Mac OS X 下:打开终端窗口,转到您的来源并输入:

    grep -rn $'\xFEFF' *
    

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

    【讨论】:

    • 因为它几乎可以肯定是文件的前两个字节,所以问题是把它拿走。我对 awk 不太熟悉,但它应该是单行的,可以删除文件的前两个字节。
    • 确实,不难找到向您展示如何做到这一点的重复问题。 awk 'NR==1 { sub(/^\357\273\277/, "") } 1' file >newfile
    【解决方案4】:

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

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

    【讨论】:

    • 如前所述,我更多的是寻找 Mac OS X(或 UNIX)工具。
    • 是的,我错过了……我想我看到了一些可以使用 Crossover 运行的地方。虽然不是很好的解决方案
    • 顺便说一句:Notepad++ 有一个选项可以在没有 BOM 的情况下保存 Unicode 文件。以防万一你要切换到 Windows ;-)
    • 我使用 wine 在 ubuntu 上运行 notepad++。我不知道 wine 是否在 OS X 上运行。notepad++ 很棒。
    • 我不认为记事本加号会显示“无换行符”和其他空白字符,尽管它会显示回车和换行...我认为你必须切换编码,它在接受的答案中进行了解释
    【解决方案5】:

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

    "Comparison of hex editors" in WikiPedia

    【讨论】:

    • 即使在工具请求问题的答案中,这个也不是特别有用,因为它并没有建议解决方案甚至工具,而只是工具的一个类别。
    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2015-12-13
    • 1970-01-01
    相关资源
    最近更新 更多