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 = / c h a r s e t = [ " ] * ( [ ^ > " \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