[node.js] Node.js가 지원하는 인코딩 목록

ISO-8859-1 (라틴 1이라고도 함)로 인코딩 된 파일을 읽어야합니다.

var file_contents = fs.readFileSync("test_data.html", "latin1");

그러나 노드는 “latin1″또는 “ISO-8859-1″이 유효한 인코딩이 아니라고 불평합니다 ( “오류 : 알 수없는 인코딩”).

어떤 인코딩이 readFileSync허용됩니까?



답변

인코딩의 목록 노드 지원은 기본적으로 오히려 짧아서 :

  • 아스키
  • base64
  • 마녀
  • ucs2 / ucs-2 / utf16le / utf-16le
  • utf8 / utf-8
  • 이진 / 라틴 1 (ISO8859-1, 노드 6.4.0+에서만 latin1)

6.4.0 이전 버전을 사용 중이거나 비 유니 코드 인코딩을 처리하지 않으려면 문자열을 다시 코딩하십시오.

iconv-lite 를 사용 하여 파일을 다시 코딩하십시오.

var iconvlite = require('iconv-lite');
var fs = require('fs');

function readFileSync_encoding(filename, encoding) {
    var content = fs.readFileSync(filename);
    return iconvlite.decode(content, encoding);
}

또는 iconv를 사용하십시오 .

var Iconv = require('iconv').Iconv;
var fs = require('fs');

function readFileSync_encoding(filename, encoding) {
    var content = fs.readFileSync(filename);
    var iconv = new Iconv(encoding, 'UTF-8');
    var buffer = iconv.convert(content);
    return buffer.toString('utf8');
}


답변

위의 해결책이 효과가 없다면 다음과 같은 순수한 nodejs 코드로 동일한 결과를 얻을 수 있습니다. 위의 내용은 저에게 효과적이지 않았으며 OSX에서 ‘npm install iconv’를 실행할 때 컴파일 예외가 발생했습니다.

npm install iconv

npm WARN package.json portalServer@0.1.0 No README.md file found!
npm http GET https://registry.npmjs.org/iconv
npm http 200 https://registry.npmjs.org/iconv
npm http GET https://registry.npmjs.org/iconv/-/iconv-2.0.4.tgz
npm http 200 https://registry.npmjs.org/iconv/-/iconv-2.0.4.tgz

> iconv@2.0.4 install /Users/markboyd/git/portal/app/node_modules/iconv
> node-gyp rebuild

gyp http GET http://nodejs.org/dist/v0.10.1/node-v0.10.1.tar.gz
gyp http 200 http://nodejs.org/dist/v0.10.1/node-v0.10.1.tar.gz
xcode-select: Error: No Xcode is selected. Use xcode-select -switch <path-to-xcode>, or see the xcode-select manpage (man xcode-select) for further information.

인코딩이 지정되지 않은 경우 fs.readFileSync ()는 버퍼를 반환합니다. 그리고 Buffer에는 파일의 내용을 제공하는 인코딩이 지정되지 않은 경우 UTF8로 변환되는 toString () 메소드가 있습니다. nodejs 문서를 참조하십시오. 이것은 나를 위해 일했습니다.


답변