提问人:deceze 提问时间:7/1/2009 最后编辑:TylerHdeceze 更新时间:1/31/2023 访问量:57788
如何清除源代码文件中的不可见字符?
How can I clean source code files of invisible characters?
问:
我有一个奇怪的问题:在我的 HTML/PHP 代码的某个地方,有一个隐藏的、看不见的字符,我似乎无法摆脱。通过从 Firebug 复制它并转换它,我将其识别为“零宽度无间断空格”。它在我的网站中显示为非空文本节点,并导致严重的布局问题。
问题是,我无法摆脱它。即使打开隐形人,我也在我的文件中看不到它(呃)。我似乎找不到它,似乎没有搜索工具可以发现它。我重写了我的代码,但它似乎在其中一个框架文件的更深处。
我怎样才能通过跨文件的字符码或类似的东西来查找字符?我对不同的工具持开放态度,但它们必须在 Mac OS X 上运行。
答:
在 Notepad++ 中,有一个显示所有字符的选项。从顶部菜单:
视图 -> 显示符号 -> 显示所有字符
评论
我不是 Mac 用户,但我的一般建议是:当所有其他方法都失败时,请使用十六进制编辑器。在这种情况下非常有用。
评论
您不会在编辑器中获取该字符,因为您无法在文本编辑器中找到它。#FEFF 或 #FFFE 是所谓的字节顺序标记。它们是 Microsoft 的一项发明,用于在 Unicode 文件中讲述,多字节字符的存储顺序。
要删除它,请告诉您的编辑器将文件保存为 ANSI/ISO-8859 或不带 BOM 的 Unicode。如果你的编辑器不能这样做,你要么不得不切换编辑器(可悲的是),要么使用某种截断工具,例如,十六进制编辑器,让你看到文件的真实外观。
在谷歌搜索上,TextWrangler 似乎具有“UTF-8,无 BOM”模式。否则,如果你对终端感到满意,你可以使用 Vim:
:set nobomb
并保存文件。普雷斯托!
字符始终是文本文件中的第一个字符。正如我所提到的,支持 BOM 的编辑根本不会向您展示它。
评论
这是一个字节顺序标记。在“Mac OS X:打开终端窗口”下,转到您的来源并键入:
grep -rn $'\xFEFF' *
它将显示包含 BOM 的行号和文件名。
评论
awk 'NR==1 { sub(/^\357\273\277/, "") } 1' file >newfile
如果您使用的是 Textmate,并且问题出在 UTF-8 文件中:
- 打开文件
- 文件> 使用编码> ISO-8859-1 (Latin1) 重新打开
- 您应该能够查看并删除文件中的第一个字符
- 文件>保存
- 文件> 使用 UTF8 编码重新打开>
- 文件>保存
它每次都对我有用。
我知道现在回答这个问题有点晚了,但我正在添加如何在 Visual Studio 中更改编码,希望它对将要阅读本文的人有所帮助:
- 转到文件 -> 将(您的文件名)另存为...
- 在文件资源管理器窗口中,选择“保存”按钮旁边的小箭头 - >单击“使用编码保存...
- 单击“是”(在“是否要替换现有文件”对话框中)
- 最后选择例如Unicode(没有签名的UTF-8) - 删除BOM
评论