- try {
- links.push(...parseLinkHeader(linkHeader));
- } catch (e) {
- if (e instanceof ParseSyntaxError) {
- this.logger.debug(_scope, 'failed to parse link header, bad syntax', { error: e, linkHeader });
- } else {
- this.logger.error(_scope, 'failed to parse link header', { error: e, linkHeader });
+ if (linkHeader) {
+ try {
+ links.push(...parseLinkHeader(linkHeader));
+ } catch (e) {
+ /* istanbul ignore else */
+ if (e instanceof ParseSyntaxError) {
+ this.logger.debug(_scope, 'failed to parse link header, bad syntax', { error: e, linkHeader });
+ } else {
+ this.logger.error(_scope, 'failed to parse link header', { error: e, linkHeader });
+ }
+ }
+ }
+
+ const contentType = LinkHelper.parseContentType(getHeader(headers, Enum.Header.ContentType));
+ const nonUTF8Charset = !/utf-*8/i.test(contentType.params.charset) && contentType.params.charset;
+ if (nonUTF8Charset) {
+ const iconv = new Iconv(nonUTF8Charset, 'utf-8//translit//ignore');
+ try {
+ body = iconv.convert(body).toString('utf8');
+ } catch (e) {
+ /* istanbul ignore next */
+ this.logger.error(_scope, 'iconv conversion error', { error: e, contentType, url });
+ // But try to carry on, anyhow.