programing

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

batch 2023. 7. 30. 17:31
반응형

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

ISO-8859-1(latin1이라고도 함)로 인코딩된 파일을 읽어야 합니다. 다음과 같은 것이 있습니다.

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

그러나 노드는 "latin1" 또는 "ISO-8859-1"이 올바른 인코딩("오류: 알 수 없는 인코딩")이 아니라고 불평합니다.

인코딩 기능readFileSync승낙하시겠습니까?

노드가 기본적으로 지원하는 인코딩 목록은 매우 짧습니다.

  • 아스키의
  • 베이스64
  • base64url(노드 v14+)
  • 육각형의
  • ucs2/cs-2/utf16le/utf-16le
  • utf8/utf-8
  • 이진/라틴1(ISO8859-1, latin1만 노드 6.4.0+)

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');
}

인코딩은 버퍼 설명서에 자세히 설명되어 있습니다.

버퍼문자 인코딩:

문자 인코딩

  • utf8멀티바이트 인코딩 유니코드 문자입니다.많은 웹 페이지 및 기타 문서 형식은 UTF-8을 사용합니다.기본 문자 인코딩입니다.
  • utf16le멀티바이트 인코딩 유니코드 문자입니다.와는 달리utf8문자열의 각 문자는 2바이트 또는 4바이트를 사용하여 인코딩됩니다.
  • latin1Latin-1은 ISO-8859-1의 약자입니다.이 문자 인코딩은 다음의 유니코드 문자만 지원합니다.U+0000로.U+00FF.

이진-텍스트 인코딩

  • base64Base64 인코딩입니다.문자열에서 버퍼를 작성할 때, 이 인코딩은 RFC 4648, 섹션 5에 명시된 "URL 및 파일 이름 안전 알파벳"도 올바르게 수락합니다.
  • base64url (Node v14+): RFC 4648, 섹션 5에 명시된 대로 base64url 인코딩.문자열에서 버퍼를 만들 때 이 인코딩은 일반 base64 인코딩 문자열도 올바르게 사용할 수 있습니다.버퍼를 문자열로 인코딩할 때 이 인코딩은 패딩을 생략합니다.
  • 각 바이트를 두 개의 16진수 문자로 hex인코딩합니다.

레거시 문자 인코딩

  • 7비트 ASCII 데이터에만 ascii해당됩니다.일반적으로 'utf8'(또는 데이터가 항상 ASCII 전용인 것으로 알려진 경우 'latin1')이 ASCII 전용 텍스트를 인코딩하거나 디코딩할 때 더 나은 선택이 될 것이기 때문에 이 인코딩을 사용할 이유가 없습니다.
  • 'latin1'의 binary별칭입니다.
  • 'utf16le'의 ucs2별칭입니다.

v12부터 노드는 다음 인코딩 값을 지원합니다.

  • ascii
  • base64
  • hex
  • latin1
  • ucs2
  • utf16le
  • utf8

노드 v14 이상 추가base64urlcoding

다음 셸 스크립트를 사용하여 모든 버전의 노드에서 지원되는 인코딩을 해킹하여 추출합니다.

for v in {12..19}; do echo v$v; curl -L https://raw.githubusercontent.com/nodejs/node/v$v.x/lib/buffer.js --silent | grep -A 100000 'const encodingOps' | grep -B 100000 -E '^}' -m 1 | grep -Eo '^  [^ :}]+' | grep -Eo '[^ ]+' | sort; echo ---; done

위 솔루션이 작동하지 않는 경우 다음과 같은 순수 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()는 인코딩이 지정되지 않은 경우 버퍼를 반환합니다.또한 버퍼에는 파일 내용을 제공하는 인코딩이 지정되지 않은 경우 UTF8로 변환되는 toString() 메서드가 있습니다.nodejs 설명서를 참조하십시오.이것은 저에게 효과가 있었습니다.

언급URL : https://stackoverflow.com/questions/14551608/list-of-encodings-that-node-js-supports

반응형