RFC 1738指定了URL的语法,并提到了这一点
URL仅使用
US-ASCII编码字符集的图形可打印字符编写.八位字节80-FF十六进制不
用于US-ASCII,八位字节00-1F和7F十六进制表示
控制字符; 这些必须编码.
但是,它并没有说明这些八位字节代表什么代码.
RFC 2396似乎试图改善这种情况,但是:
但是,对于包含非ASCII字符的原始字符序列,情况更加困难.如果可能存在多个[RFC2277],那么传输用于表示字符序列的八位字节序列的因特网协议有望提供一些识别所用字符集的方法.但是,通用URI语法中目前没有提供完成此标识的规定.单个URI方案可能需要单个字符集,定义默认字符集,或提供指示所使用的字符集的方法.
期望对URI内的字符编码进行系统处理,作为本说明书的未来修改.
是否有任何明确的方式,客户端可以确定在哪个字符集中解释编码的八位字节,或者服务器可以确定客户端用于编码的内容?
在我看来,大多数服务器都默认使用UTF-8,但这似乎是一个事实上的选择而不是指定的服务器.
我需要将一个字符串从Windows-1251转换为UTF-8.
我尝试用iconv做这个,但我得到的是这样的:
пЅЅЅЅЅЅЅЅЅЅЅЅЅЅЅЅЅЅЅЅЅ
var iconv = new Iconv('windows-1251', 'utf-8')
title = iconv.convert(title).toString('utf-8')
Run Code Online (Sandbox Code Playgroud) 是否可以读取非utf8编码的网页?例如windows-1251.我尝试使用node-iconv转换结果:
var convertedBody = new Iconv('windows-1251','utf-8').convert(responseBody));
Run Code Online (Sandbox Code Playgroud)
但我得到例外:
Error: EILSEQ, Illegal character sequence.
at IncomingMessage.<anonymous> (/root/nodejstest/test2.js:22:19)
at IncomingMessage.emit (events.js:59:20)
at HTTPParser.onMessageComplete (http.js:111:23)
at Socket.ondata (http.js:1183:22)
at Socket._onReadable (net.js:654:27)
at IOWatcher.onReadable [as callback] (net.js:156:10)
Run Code Online (Sandbox Code Playgroud)
谢谢!