Skip to content

Commit 5aafa2a

Browse files
committed
Add charset replace
1 parent 3495eea commit 5aafa2a

1 file changed

Lines changed: 18 additions & 19 deletions

File tree

index.js

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
1-
'use strict';
1+
'use strict'
22

3-
var jschardet = require('jschardet');
4-
var charset = require('charset');
5-
var iconv = require('iconv-lite');
3+
var jschardet = require('jschardet')
4+
var iconv = require('iconv-lite')
5+
var charset = require('charset')
66

7-
module.exports = ensureUTF8;
7+
var charsetRegex = /charset=["]*([^>"\s]+)/i
88

9-
function ensureUTF8(binaryBuffer, contentType) {
10-
var encoding = detectEncoding(binaryBuffer, contentType);
11-
12-
if (encoding === 'utf8') return binaryBuffer.toString('utf8');
13-
14-
return iconv.decode(binaryBuffer, encoding);
9+
module.exports = function ensureUTF8 (binaryBuffer, contentType) {
10+
var encoding = getEncoding(binaryBuffer, contentType)
11+
12+
return encoding === 'utf8'
13+
? binaryBuffer.toString('utf8')
14+
: iconv.decode(binaryBuffer, encoding).replace(charsetRegex, 'utf-8')
1515
}
1616

17-
function detectEncoding(content, contentType) {
18-
var byMetaAndContentType = charset({'content-type': contentType}, content);
19-
if (byMetaAndContentType) return byMetaAndContentType;
20-
21-
var byGuessing = jschardet.detect(content);
22-
if (byGuessing && byGuessing.encoding) return byGuessing.encoding;
23-
24-
return 'utf8';
17+
function getEncoding (content, contentType) {
18+
return charset({'content-type': contentType}, content) || inferredEncoding(content) || 'utf8'
2519
}
20+
21+
function inferredEncoding(content) {
22+
var charset = jschardet.detect(content);
23+
return charset && charset.encoding && charset.encoding
24+
}

0 commit comments

Comments
 (0)