Unicode PhantomJS无法识别特殊/重音UTF-8字符

Unicode PhantomJS无法识别特殊/重音UTF-8字符,unicode,command-line,utf-8,character-encoding,phantomjs,Unicode,Command Line,Utf 8,Character Encoding,Phantomjs,我目前在PhantomJS(版本2.1.1/Windows7)中遇到无法识别UTF-8字符的问题。在提出这个问题之前,我发现以下两篇文章对配置命令提示符非常有用: type utf8Test.txt 正如第二篇文章所建议的,我使用了命令 chcp 65001 将代码页更改为UTF-8。然后,我还将命令提示符的默认字体设置为Lucida console 为了测试这是否有效,我创建了以下UTF-8文本文件 -----------------------------------------

我目前在PhantomJS(版本2.1.1/Windows7)中遇到无法识别UTF-8字符的问题。在提出这个问题之前,我发现以下两篇文章对配置命令提示符非常有用:

type utf8Test.txt
正如第二篇文章所建议的,我使用了命令

chcp 65001
将代码页更改为UTF-8。然后,我还将命令提示符的默认字体设置为Lucida console

为了测试这是否有效,我创建了以下UTF-8文本文件

---------------------------------------------------------
San José
Cañon City
Przecław Lanckoroński
François Gérard Hollande
El Niño
vis-à-vis
---------------------------------------------------------
然后运行以下命令以演示命令提示符是否能够识别和正确显示字符:

type utf8Test.txt

在这项工作完成后,我把注意力转向幻影。按照说明,我创建了下面的设置json文件,以确保UTF-8是输入和输出字符编码(尽管根据官方文档,这似乎是默认的)

然后,我在同一命令提示符窗口中使用前面提到的json设置文件,通过PhantomJS运行了以下JavaScript:

console.log("---------------------------------------------------------");

console.log("San José");
console.log("Cañon City");
console.log("Przecław Lanckoroński");
console.log("François Gérard Hollande");
console.log("El Niño");
console.log("vis-à-vis");

console.log("---------------------------------------------------------");

page = require('webpage').create();

// Display the initial requested URL
page.onResourceRequested = function(requestData, request) { 
    if(requestData.id === 1){
        console.log(requestData.url);
    }
};

// Display any initial requested URL response error
page.onResourceError = function(resourceError) {
    if(resourceError.id === 1){
        console.log(resourceError.status + " : " + resourceError.statusText);
    }
};

page.open("https://en.wikipedia.org/wiki/San_José", function(status) {
    console.log("---------------------------------------------------------");
    phantom.exit();
});
运行此脚本的输出如下所示:

由此我可以看出,PhantomJS无法理解UTF-8特殊字符,而且当提供特殊字符或重音字符时,它会将“未知”字符传递给网站,如下所示:

URL passed to PhantomJS:   
https://en.wikipedia.org/wiki/San_José

URL passed to remote host: 
https://en.wikipedia.org/wiki/San_Jos%EF%BF%BD

----------------------------------------------

%EF%BF%BD
�

instead of:

%C3%A9
é
这会导致网站响应“400:Bad Request”错误,特别是在Wikipedia中,请求URL会导致以下错误消息:

错误标题-请求的页面标题包含无效的UTF-8序列

所以,有人说了这么多,有人知道如何补救吗?现在有很多网站在其页面URL中使用UTF-8特殊/重音字符,如果可以使用PhantomJS访问它们,那就太好了

我真的很感激你能给我的任何帮助或建议

var url = 'https://en.wikipedia.org/wiki/San_José';

page.open(encodeURI(url), function(status) {
    console.log("---------------------------------------------------------");
    console.log(page.evaluate(function(){ return document.title }));
    phantom.exit();
});


是的,它在Windows上乱码了这些符号(在Linux上它可以工作),但至少你可以打开页面并处理它们。

维基页面的URL不是正确的吗?它是由PhantomJS打开的,没有问题。谢谢你回复我。您是正确的,这就是我在示例中尝试访问的url。然而,与chrome不同,正如第二个屏幕截图末尾所示,PhantomJS不会将“é”翻译为%C3%A9,因为它无法识别脚本中的角色。相反,它将其翻译为'�' 或%EF%BF%BD(字符未知)。我的主要问题是,如果存在UTF8特殊字符/重音字符,则无法从文本文件或直接从脚本中读取一组URL。更一般地说,我想知道如何让PhantomJS读取这样的字符。谢谢,我已经忘记了encodeURI(),它工作得非常好:-),所以这肯定回答了我问题的一半,但我仍然想知道如何让PhantomJS在Windows中显示这样的字符。从我上面问题的最初部分所描述的测试来看,在我看来Windows命令提示符现在能够显示它们了。因此,我想知道关于PhantomJS编码配置,我是否遗漏了什么,以使其能够识别并正确显示这些字符。此外,我刚刚意识到,通过查看您的屏幕截图,“Przecław Lanckoroński”显示时没有任何未知字符,尽管该示例中的字符有问题(即“ł”和“ń”)似乎已分别转换为“l”和“n”。您是否在测试中全部更改了该特定文本?很奇怪,其他5个文本与我的设置中的文本一样。是的,在Linux上它确实工作得很好:-)关于普泽瓦夫·兰科洛斯基——出于某种原因,这个名字被复制而没有波兰符号。至于其余的,PhantomJS在控制台中使用UTF-8时确实有问题,因为总是有两个空白框而不是一个符号。啊,好的,非常感谢你让我知道。是的,这只是一个痛苦,但是如果我没有听到其他人关于如何解决这个问题的消息,我会将你的encodeURI()答案标记为完整答案,因为它至少可以在URL中使用这样的字符。