PhantomJS 将字符变成坏数据

问题描述 投票:0回答:4

我正在phantomjs中运行一个js文件

var settings = {mode: 'w', charset: 'UTF-8'};
page.open(path, settings, function (status) {
    if (status !== "success") {
        console.log("Unable to access network");
    } else {
        page.evaluate(function() {
            window.console.log = function(msg) { alert(msg) }; 
            var $p = document.querySelectorAll('.my-class')[0];
            var html = $p.innerHTML;
            return html;
        });
    }
});

数据看起来像

<div class="my-class">Power, speed, style —&nbsp;James Bond’s 10&nbsp;greatest drives</div>

但是从 phantomJS 返回的 html 是

Power, speed, style ΓÇö James BondΓÇÖs 10 greatest drives

我的页面有

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

在头脑中。

javascript utf-8 character-encoding phantomjs
4个回答
0
投票

尝试

encoding
参数。如果
UTF8
不起作用,请尝试
UTF-8

var settings = {mode: 'w', charset: 'UTF-8', encoding: 'UTF8'};

0
投票

&
是phantomJS中的运算符吗?

将这些排列起来:

style —&nbsp;James Bond’s 10&nbsp;greatest
   style ΓÇö James BondΓÇÖs 10 greatest

我认为“emdash”(

)和引用(
)是恶棍,而不是
&nbsp;
。 nbsp = 不间断空格,将其视为空格,但可以防止换行。

结论:phantomJS 中无法正确识别 UTF-8 字符。

ΓÇÖ
是十六进制
CE93C387C396
(假设采用 utf8 编码),但是该十六进制不会映射到任何可识别的内容。 (我之所以选择这条路径,是因为一个常见的问题是编码被误解,从而导致损坏。)此外,由于
ΓÇÖ
是希腊语和拉丁语的混合体,因此无法在 UTF- 以外的单个字符集中正确解释它8.

“数据”从哪里来?也许损坏发生在 phantomJS 之前。


0
投票
<meta/>

标记,如下所示:


<meta http-equiv="content-type" content="text/html"; charset="UTF-8"> <div class="my-class">Power, speed, style —&nbsp;James Bond’s 10&nbsp;greatest drives</div>



0
投票

我正在使用 phantomJs 的 rasterize.js 示例将 html 语句转换为 pdf。然而,一些 unicode 字符被渲染为垃圾。请参阅快照 1,其中印度货币符号(区域设置:'en-IN',货币:INR)渲染不正确。

添加 @tic 建议的元标记(到 head 标记)后,pdf 开始按预期显示字符。

请注意,meta 标签在 Chrome 中是可选的,这意味着即使没有 meta 标签,我也可以在浏览器中直接浏览 html 页面时看到符号。问题是渲染为 pdf/png 时。

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

之前:(货币符号混乱)

之后:(正确的货币符号)

© www.soinside.com 2019 - 2024. All rights reserved.