1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-13 09:46:22 +00:00

Decode the fetched body correctly if content-type was provided

This commit is contained in:
kawmra
2018-02-28 01:54:31 +09:00
parent 6bcb6398f8
commit 6439810d03
3 changed files with 32 additions and 1 deletions

View File

@@ -8,6 +8,7 @@ import copyImage from 'browser/main/lib/dataApi/copyImage'
import { findStorage } from 'browser/lib/findStorage'
import fs from 'fs'
import eventEmitter from 'browser/main/lib/eventEmitter'
import iconv from 'iconv-lite'
CodeMirror.modeURL = '../node_modules/codemirror/mode/%N/%N.js'
@@ -317,7 +318,7 @@ export default class CodeEditor extends React.Component {
fetch(pastedTxt, {
method: 'get'
}).then((response) => {
return (response.text())
return this.decodeResponse(response)
}).then((response) => {
const parsedResponse = (new window.DOMParser()).parseFromString(response, 'text/html')
const value = editor.getValue()
@@ -335,6 +336,31 @@ export default class CodeEditor extends React.Component {
})
}
decodeResponse (response) {
const headers = response.headers
const _charset = headers.has('content-type')
? this.extractContentTypeCharset(headers.get('content-type'))
: undefined
return response.arrayBuffer().then((buff) => {
return new Promise((resolve, reject) => {
try {
const charset = _charset !== undefined && iconv.encodingExists(_charset) ? _charset : 'utf-8'
resolve(iconv.decode(new Buffer(buff), charset).toString())
} catch (e) {
reject(e)
}
})
})
}
extractContentTypeCharset (contentType) {
return contentType.split(';').filter((str) => {
return str.trim().toLowerCase().startsWith('charset')
}).map((str) => {
return str.replace(/['"]/g, '').split('=')[1]
})[0]
}
render () {
const { className, fontSize } = this.props
let fontFamily = this.props.fontFamily