如何设置子窗口的字符编码

时间:2014-04-14 20:15:53

标签: javascript encoding utf-8 window.open

我正在打开一个子窗口并用JavaScript编写内容。父页面具有UTF-8字符集,但子窗口打开时带有ISO-8859-1

我尝试使用document.write使用元标记设置子页面内容类型,但它似乎没有效果。

launcherHtml = '
  <!DOCTYPE html>
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
    </body>
  </html>
'

sandbox = window.open()
sandbox.document.open()
sandbox.document.write(launcherHtml)
sandbox.document.close()

sandbox.document.characterSet // ISO-8859-1 !!!

我也尝试在子窗口中使用<meta charset="UTF-8">作为标记,但结果是一样的。

如何将弹出窗口的字符集正确指定为UTF-8?

1 个答案:

答案 0 :(得分:3)

适用于多种哑剧类型的2016年末的方法,包括&#34; text / plain&#34; &#34; text / html&#34;

  • 使用数据网址
  • 指定mime-type
  • 将字符编码指定为UTF-8。
  • 使用uriEncode
  • 将文本转换为转义的UTF-8字符
  • 替换&#39;#&#39;在UTF八位字符串中使用&#34;%23&#34;。

JavaScript示例

var launcherHtml = `
  <!DOCTYPE html>
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <title>UTF-8 example</title>
    </head>
    <body>
    <h1>Example using unicode and '#'</h1>

    Hello folks, 你好! (nǐ hǎo) in Chinese, good evening,
    こんばんは (in Japanese).
    </body>
  </html>
`;

var launcherURL = "data:text/html;charset=utf-8,"
     + encodeURI( launcherHtml).replace(/#/g,"%23");

sandbox = window.open(launcherURL)

sandbox.document.characterSet // UTF-8, yippee