Articles of 字符编码

解码Windows-1252和引用可打印的HTML的组合

我得到了一段代表HTML的文本,例如: <html>\r\n<head>\r\n<meta http-equiv=3D\"Content-Type\" content=3D\"text/html; charset=3DWindows-1=\r\n252\">\r\n<style type=3D\"text/css\" style=3D\"display:none;\"><!– P {margin-top:0;margi=\r\nn-bottom:0;} –></style>\r\n</head>\r\n<body dir=3D\"ltr\">This should be a pound sign: =A3 and this should be a long dash: =96 \r\n</body>\r\n</html>\r\n 从HTML <meta>标签,我可以看到,这段HTML应该被编码为Windows-1252。 我正在使用node.jsparsing与cheerio这段文字。 但解码与https://github.com/mathiasbynens/windows-1252不帮助: windows1252.decode(myString); 正在返回相同的inputstring。 我认为的原因是因为inputstring已经在标准的node.js charset中编码了,但是它实际上代表了一个windows-1252编码的HTML片段(如果这是有道理的话)。 检查那些奇怪的hex数前面加上=我可以看到有效的windows-1252代码,例如: 这个=\r\n和这个\r\n应该以某种方式代表在Windows世界的回车, =3D :HEX 3D是DEC 61 ,它是等号: = , =96 :HEX 96是DEC 150 ,它是一个'破折号': – (某种“长减号”), =A3 :HEX A3是DEC 163这是一个英镑符号: £ […]

如何处理包含非utf8字符的GET参数?

在一个基于nodejs / express的应用程序中,我需要处理可能包含使用iso-8859-1字符集编码的变音符号的GET请求。 不幸的是,它的查询stringparsing器似乎只处理纯ASCII和UTF8: > qs.parse('foo=bar&xyz=foo%20bar') { foo: 'bar', xyz: 'foo bar' } # works fine > qs.parse('foo=bar&xyz=T%FCt%20T%FCt') { foo: 'bar', xyz: 'T%FCt%20T%FCt' } # iso-8859-1 breaks, should be "Tüt Tüt" > qs.parse('foo=bar&xyz=m%C3%B6p') { foo: 'bar', xyz: 'möp' } # utf8 works fine 有没有隐藏的选项或其他干净的方式来使这个工作与其他的字符集呢? 默认行为的主要问题是,我无法知道是否存在解码错误 – 毕竟,input可能是简单解码的东西,看起来像一个urlencodedstring。

将UTF-8数据转换为正确的string格式

如果我通过一个套接字(或通过任何外部来源)收到一个UTF-8string,我想把它作为一个正确parsing的string对象。 以下代码显示了我的意思 var str='21\r\nJust a demo string \xC3\xA4\xC3\xA8-should not be anymore parsed'; // Find CRLF var i=str.indexOf('\r\n'); // Parse size up until CRLF var x=parseInt(str.slice(0, i)); // Read size bytes var s=str.substr(i+2, x) console.log(s); 这个代码应该打印 只是一个演示stringäè 但是由于UTF-8数据没有被正确parsing,所以只能parsing到第一个Unicode字符 只是一个演示stringä 谁会有一个想法如何正确地转换这个?

带有socket.io的nodejs中的UTF-8

我无法通过使用nodejs和socket.io将utf-8编码的string传递给客户端。 我使用的是什么传输(websocket,flashsocket或者xhr-polling)似乎并不重要。 代码非常简单明了: 服务器: var app = require('http').createServer(handler) , io = require('socket.io').listen(app,{log:false}); app.listen(80); function handler (req, res) { fs.readFile(__dirname + '/index.html','utf-8', function (err, data) { if (err) { res.writeHead(500); return res.end('Error loading index.html'); } var type="text/html"; res.writeHead(200, {'Content-Type':type + "; charset=utf-8"}); res.end(data,'utf8'); }); } io.sockets.on('connection', function (socket) { socket.emit('msg', { text: 'æøå' });//Here we send […]

缓冲区toString('utf8')从Firebird中select后返回

我正在使用火鸟,我select用户的数据。 它返回我缓冲区对象。 所以在上一个问题中,他们提出这个问题 var name = result[0].name.toString( 'utf8' ); 所以我做了,它的工作,但在一些行中有俄罗斯字符,我不知道什么编码。 而当我显示他们返回 。 如何解决它? 请社区帮助。 谢谢

接收和解释hex数据时发生内容types为application / octet-stream错误

我正尝试将二进制数据发送到Azure移动服务API。 当我们收到请求并尝试parsing数据时,高于7f的字节值(即80,81,90,ff等)被解释为不同。 例如,如果我们已经发送 Sent data : 67 01 00 00 31 00 31 00 32 00 31 00 00 00 A0 10 Received data: 67 01 00 00 31 00 31 00 32 00 31 00 00 00 ef bf bd 10 这是curl命令: curl –header "Content-Type:application/octet-stream" -X POST https://xxxx/Api/temp –data-binary @/home/device_data.txt Nodejs移动服务脚本代码片段 exports.post = function(request, […]

console.log中的节点stream缓冲区vs process.stdout.write

使用NodeJS v5.6,我创build了一个名为read-stream.js的文件: const fs = require('fs'), stream = fs.createReadStream(process.argv[2]); stream.on('data', function(chunk) { process.stdout.write(chunk); }); stream.on('error', function(err) { process.stderr.write("ERROR: " + err.message + "\n"); }); 和一个名为target.txt纯文本数据文件: hello world this is the second line 如果我做node read-stream.js target.txt的内容正常打印在我的控制台,一切都很好。 但是,如果我切换process.stdout.write(chunk); 用console.log(chunk); 那么我得到的结果是这样的: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64 0a 74 68 69 73 […]

的NodeJS。 处理 字符编码

我在处理字符编码方面遇到困难。 我试图刮下面的url: http://www.google.com/movies?near=Montreal&date=0 我的代码如下所示: var http = require('http'); var url = require('url'); var Iconv = require('iconv').Iconv; var location = 'montreal'; var googleMovies = url.parse("http://www.google.com/movies?near=" + location); var req = http.request(googleMovies, function(response) { var str = ''; response.on('data', function(chunk) { str += chunk; }); response.on('end', function() { var iconv = new Iconv('latin1', 'UTF-8'); str = iconv.convert(str).toString(); […]

节点JS POST多部分/表单数据请求

我想通过http模块使用multipart / form-data内容types从Node JS发送文件。 二进制编码的问题。 当我试图发送简单的文本文件时没关系: url: 'some-site.com', method: 'POST', headers: { 'content-type': 'multipart/form-data; boundary=—–BNDRY', 'content-length': 128 }, body: '——-BNDRY\r\ncontent-type: text/plain\r\ncontent-disposition: form-data; name="file"; filename="file.txt"\r\n\r\ntest\r\n——-BNDRY–' } 但是,当我试图发送文件后读取文件(例如通过FS模式),并将缓冲区string请求正文发送失败。 我尝试了Buffer.toString(encoding)方法和content-transfer-encoding:encoding header的不同组合,但没有成功。 出于某种原因,base64编码也不能工作,我已经用bodyParser进行了testing,好像它不关心内容传输编码:body64中的标头 – 内容仍然是未解码的base64string。 而且我不想使用像node-strongidable或express这样的外部模块来解决我的问题。 谢谢。

将非ASCII字符(变音符号,重音符号)转换为最接近的ASCII码(创build子弹)

我在JavaScript寻找方法来将string中的非ASCII字符转换为最接近的字符,类似于PHP iconv函数。 例如,如果input的string是Rånades på Skyttis i Ö-vik ,它应该被转换为Ranades pa skyttis i o-vik 。 我曾看过phpjs但iconv不包括在内。 是否有可能在JavaScript中执行这种转换,如果是这样的话?