study
[node.js] txt 파일 UTF-8 EUC-KR 인코딩 디코딩 방법
알로호모라
2022. 5. 4. 18:22
반응형
EUC-KR 로 인코딩 되어있는 txt 파일을 node.js로 불러 읽으려니 한글이 깨져 나온다.
인코딩을 위해 순수 자바스크립트로 만들어져 빠르다는 iconv-lite 패키지를 설치해보기
1. iconv-lite 설치
npm install iconv-lite
2. iconv-lite / fs 가져오기
import fs from 'fs';
import iconv from 'iconv-lite';
3. 사용하기
* iconv-lite 패키지의 특징은 'UTF-8'을 기준으로 한다는 것 !
const file = '/Users/Documents/address_data/match_build_seoul.txt';
// EUC-KR로 된 txt파일 읽은 데이터 content에 담기
const content = fs.readFileSync(file);
// EUC-KR -> UTF-8 로 디코딩하기
const utf8Str = iconv.decode(content, 'euc-kr');
console.log('utf8=', utf8Str); -> 이제 한글이 깨지지않고 잘 뜸
// UTF-8 txt 로 저장하기
fs.writeFileSync('ut8-data.txt', utf8Str, { encoding: 'utf8' });
// UTF-8 -> EUC-KR 로 인코딩하기
const eucKrStr = iconv.encode(utf8Str, 'euc-kr');
// EUC-KR txt 로 저장하기
fs.writeFileSync('euc-kr-data.txt', content, { encoding: 'binary' })
나는 EUC-KR -> UTF-8 로 변환이 필요하니 아래 코드로만 가져와서 읽어주기
const file = '/Users/Documents/address_data/match_build_seoul.txt';
const content = fs.readFileSync(file);
// UTF-8 txt 로 저장하기
const decodedToUtf8Content = iconv.decode(content, 'euc-kr');
const fileStream = fs.createReadStream(decodedToUtf8Content);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity,
});
for await (const line of rl) {
console.log(`Line from file: ${line}`);
}
crlfDelay : Infinity =====> txt 파일 안의 \r \n을 한줄씩 break하기위한 옵션
=> 이렇게 하려고 했는데 ERROR
!! Error: ENAMETOOLONG: name too long, open 'txt 파일 내용'
decodedToUtf8Content에 utf-8로 디코딩되어 들어간 내용 전체가 파일명이 되어서 파일명이 너무 길다고 나왔다
decodedToUtf8Content를 파일명을 정해 Txt 파일로 저장 후 다시 해당 파일을 불러와서 사용하기
const file = '/Users/Documents/address_data/test.txt';
const content = fs.readFileSync(file);
// UTF-8 txt 로 저장하기
const decodedToUtf8Content = iconv.decode(content, 'euc-kr');
fs.writeFileSync(
'/Users/Documents/address_data/decodedData.txt',
decodedToUtf8Content,
{ encoding: 'utf8' },
);
// const fileStream = fs.createReadStream(decodedToUtf8Content);
try {
// 방법 1
const allFileContents = fs.readFileSync(
'/Users/Documents/address_data/decodedData.txt',
'utf-8',
);
console.log('allFileContents=', allFileContents);
.
.
.
불러와졋다 휴
Reference : https://gyuha.tistory.com/522
반응형