使用JavaScript设置字符集元标记

使用JavaScript设置字符集元标记,javascript,html,utf-8,character-encoding,epiceditor,Javascript,Html,Utf 8,Character Encoding,Epiceditor,我想在这里找到一个bug: 根据所有信息,这似乎是因为浏览器默认为用户的本机字符集(在本例中为ISO-8859-1),而不是UTF-8,就像我的机器和美国的其他机器一样。我猜一个解决方案是使用HTML强制编码为UTF-8: <meta charset='utf-8'> 我刚刚将以下内容注入到DOM中: <meta> 我返回以下HTML: <meta content="text/html; charset=utf-8"> 是的,我需要在动态创建iF

我想在这里找到一个bug:

根据所有信息,这似乎是因为浏览器默认为用户的本机字符集(在本例中为
ISO-8859-1
),而不是
UTF-8
,就像我的机器和美国的其他机器一样。我猜一个解决方案是使用HTML强制编码为
UTF-8

 <meta charset='utf-8'> 
我刚刚将以下内容注入到DOM中:

<meta>
我返回以下HTML:

<meta content="text/html; charset=utf-8">


是的,我需要在动态创建iFrame时动态地执行此操作。这甚至可能不是问题所在,但这就是它的外观。我能想到的唯一“黑客”是以某种方式使用innerHTML…

您不能通过设置charset属性来设置charset内容属性,因为它们不相互反映。事实上,没有反映charset内容属性的属性

http equiv内容属性由httpEquiv属性反映,因此

 charsetMetaTag['httpEquiv'] = 'Content-Type';
将正确创建元元素


但这些都无关紧要。字符集是由解析器建立的,因此在解析HTML后在JavaScript中构建元元素对文档的字符集没有任何影响。

正如Alohci所说,从JS创建与字符集相关的元标记对当前页面没有多大影响

在我的用例中,我需要能够将当前页面序列化为字符串,并将其保存到某个后端。附加缺少的字符集元标记(如果不存在)对于这种用例很有用

作为一个侧节点,不要忘记,根据HTML5规范,字符集元标记应该位于的开头。请参阅。这个简单的细节导致了我的应用程序中的一个重要错误:)

你应该使用:

document.head.insertBefore(charsetMetaTag,document.head.firstChild);

我同意@alohci和@sebastien lorber的回答。

但只要解决你最初的问题

<meta>
根据@sebastien lorber的建议,将输出

<meta charset="UTF-8">


作为head的第一个子元素

您能解释一下该代码的作用吗?您之前说过“从JS创建与字符集相关的元标记不会对当前页面产生太大影响”。那么您的代码的目的是什么?@quark67它在文本中:它将字符集标记放在头标记的第一个子项中
document.head.insertBefore(charsetMetaTag,document.head.firstChild);
<meta>
charsetMetaTag.setAttribute("charset", "UTF-8");
<meta charset="UTF-8">