簡體   English   中英

使用node.js從windows-1250編碼的網頁獲取正確的字符串

[英]Getting correct string from windows-1250 encoded web page with node.js

我試圖從nodejs的網頁抓取一些數據,但我遇到字符編碼問題。 該網頁聲明它的編碼是: <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">當我用chrome瀏覽它時,它將編碼設置為windows-1250和所有內容看起來很好。

由於節點中的流沒有windows-1250編碼/解碼(並且utf8不起作用),我發現了一個iconv-lite包,它應該能夠輕松地在不同的編碼之間進行轉換。 但是在將響應保存到文件(或輸出到控制台)后,我仍然會收到錯誤的字符。 我也嘗試了不同的編碼,本機節點緩沖編碼,設置標題與我在chrome中看到的相同( Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3 )但是似乎沒有什么工作正常。

你可以在這里看到整個代碼https://gist.github.com/4110999

我想我錯過了關於編碼如何工作的基本信息,所以任何有關如何使用正確字符獲取數據的幫助都將受到贊賞。

編輯:
還嘗試了node-iconv包,以防它出現包問題。 將第51行更改為:

var decoder = new Iconv_native('WINDOWS-1250', 'UTF-8');  
var decoded = decoder.convert(body).toString();

但仍然得到相同的結果。

我不熟悉iconv-lite軟件包,但查看它的代碼,看起來你需要使用win1250而不是windows1250 (見這里

編碼被查找為哈希

此外,自述文件使用此代碼而不是'windows1251':

str = iconv.decode(buf, 'win1251');

我想,你正在轉換String,但你必須轉換原始字節 如果(您正在從Web上讀取內容,則必須將其讀作二進制)

從磁盤讀取win-1250中的文件的示例:

var Buffer = require('buffer').Buffer;
var Iconv = require('iconv').Iconv; 

//without options (encoding is not specified), 'fs' reads as raw bytes.
var bytes= fs.readFileSync('myFile.txt'); 
//this is bad: var myBadString = fs.readFileSync('myFile.txt', { encoding: "UTF-8" });

var buf = new Buffer(bytes, 'binary');
var translated = new Iconv('CP1250', 'UTF8').convert(buf).toString();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM