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바이트를 사용하여 인코딩됩니다.latin1
Latin-1은 ISO-8859-1의 약자입니다.이 문자 인코딩은 다음의 유니코드 문자만 지원합니다.U+0000
로.U+00FF
.이진-텍스트 인코딩
base64
Base64 인코딩입니다.문자열에서 버퍼를 작성할 때, 이 인코딩은 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 이상 추가base64url
coding
다음 셸 스크립트를 사용하여 모든 버전의 노드에서 지원되는 인코딩을 해킹하여 추출합니다.
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
'programing' 카테고리의 다른 글
JavaScript를 사용한 서버 폴링 (0) | 2023.07.30 |
---|---|
aspx 페이지 뒤에 있는 코드의 변수를 호출하는 방법 (0) | 2023.07.30 |
HTTP 응답을 보낸 후 PHP 실행 계속 (0) | 2023.07.30 |
utf8_bin vs. utf_bin_ci (0) | 2023.07.30 |
내 사이트에서 실제로 history.js를 어떻게 사용합니까? (0) | 2023.07.30 |