我正在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 — James Bond’s 10 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" />
在头脑中。
尝试
encoding
参数。如果 UTF8
不起作用,请尝试 UTF-8
。
var settings = {mode: 'w', charset: 'UTF-8', encoding: 'UTF8'};
&
是phantomJS中的运算符吗?
将这些排列起来:
style — James Bond’s 10 greatest
style ΓÇö James BondΓÇÖs 10 greatest
我认为“emdash”(
—
)和引用(’
)是恶棍,而不是
。 nbsp = 不间断空格,将其视为空格,但可以防止换行。
结论:phantomJS 中无法正确识别 UTF-8 字符。
ΓÇÖ
是十六进制CE93C387C396
(假设采用 utf8 编码),但是该十六进制不会映射到任何可识别的内容。 (我之所以选择这条路径,是因为一个常见的问题是编码被误解,从而导致损坏。)此外,由于 ΓÇÖ
是希腊语和拉丁语的混合体,因此无法在 UTF- 以外的单个字符集中正确解释它8.
“数据”从哪里来?也许损坏发生在 phantomJS 之前。
<meta/>
标记,如下所示:
<meta http-equiv="content-type" content="text/html"; charset="UTF-8">
<div class="my-class">Power, speed, style — James Bond’s 10 greatest drives</div>
我正在使用 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">
之前:(货币符号混乱)