当前位置: 首页 > 面试题库 >

具有BOM的UTF-8 HTML和CSS文件(以及如何使用Python删除BOM)

冀胤运
2023-03-14
问题内容

首先,有一些背景知识:我正在使用Python开发Web应用程序。我的所有(文本)文件当前都与BOM一起存储在UTF-8中。这包括我所有的HTML模板和CSS文件。这些资源作为二进制数据(BOM和所有)存储在我的数据库中。

从数据库检索模板时,我使用对其进行解码template.decode('utf-8')。当HTML到达浏览器时,BOM出现在HTTP响应正文的开头。这会在Chrome中产生一个非常有趣的错误:

Extra <html> encountered. Migrating attributes back to the original <html> element and ignoring the tag.

当Chrome浏览器<html>看到BOM并将其误认为内容时,Chrome似乎会自动生成标签,从而使真实<html>标签成为错误。

因此,使用Python,从我的UTF-8编码模板中删除BOM的最佳方法是什么(如果存在的话-我将来不能保证)?

对于CSS等其他基于文本的文件,主流浏览器是否可以正确解释(或忽略)BOM?它们以不带的纯二进制数据形式发送.decode('utf-8')

注意:我正在使用Python 2.5。

谢谢!


问题答案:

由于您声明

我的所有(文本)文件当前都与BOM一起存储在UTF-8中

然后使用“ utf-8-sig”编解码器对其进行解码:

>>> s = u'Hello, world!'.encode('utf-8-sig')
>>> s
'\xef\xbb\xbfHello, world!'
>>> s.decode('utf-8-sig')
u'Hello, world!'

它会自动删除预期的BOM,如果还不存在BOM,则可以正常工作。



 类似资料:
  • 问题内容: 我有一个带有BOM的UTF-8编码文件,并且想要删除BOM。是否有任何Linux命令行工具可从文件中删除BOM? 问题答案: BOM是Unicode代码点U + FEFF;UTF-8编码由三个十六进制值0xEF,0xBB,0xBF组成。 使用bash,您可以创建带有特殊引号形式的UTF-8 BOM,该形式实现Unicode转义:。因此,使用bash,从文本文件的开头删除UTF-8 BO

  • 问题内容: 使用PHP5(cgi)从文件系统输出模板文件,并出现吐出原始HTML的问题。 即使我添加了BOM修复程序,但Firefox接受它仍然有问题。您可以在此处查看实时副本:http : //ircb.in/jisti/(以及要查看的模板文件,我在http://ircb.in/jisti/home.html上提交的文件) 任何想法如何解决这个问题?o_o 问题答案: 您将使用以下代码删除utf

  • 使用PHP5(cgi)从文件系统输出模板文件,并在输出原始HTML时遇到问题。 尽管我已经添加了BOM修复,但Firefox接受它时仍然存在问题。您可以在此处看到实时副本:http://ircb.in/jisti/(还有我扔的模板文件http://ircb.in/jisti/home.html如果您想查看它) 知道怎么解决这个问题吗?o_o

  • 问题内容: 我需要解析其他工具生成的文件,该工具无条件输出带有UTF-8 BOM头(EFBBBF)的json文件。我很快发现这就是问题所在,因为Python 2.7模块似乎无法解析它: 删除BOM可以解决问题,但是我想知道是否还有另一种使用BOM头解析json文件的方法? 问题答案: 您可以打开: 或自己解码并传递给:

  • 问题内容: 我需要有关从UTF-8文件删除BOM并创建其余xml文件的副本的方法的建议。 问题答案: 有因为在UTF-8文件中的BOM的工具断裂是一个 非常 以我的经验平常的事。我不知道为什么会有这么多的否决票(但是这给了我机会去尝试赢得足够的选票来赢得特殊的SO徽章;) 更严重的是:UTF-8 BOM通常没有太大意义, 但 在规格上完全有效(尽管不建议使用)。现在的问题是,很多人不知道BOM在U

  • 问题内容: 我们有一个数据输入人员,他在Windows上使用UTF-16编码,并且希望拥有utf-8并删除BOM。utf-8转换有效,但BOM仍然存在。我将如何删除?这是我目前拥有的: 如果我使用hexdump -CI,请参阅: 在结果文件中。如何删除物料清单? 谢谢 问题答案: 只需使用和: 将为您摆脱BOM表(并推断出字节序)。