InfraPlatform

[셀스크립트 응용] ICONV 을 이용한 파일 인코딩(Encoding)

IT오이시이 2020. 11. 29. 21:16
728x90

[셀스크립트 응용] ICONV 을 이용한 파일 인코딩(Encoding)

 

종종 오래된 프로그램 파일의 인코딩을 바꿔야 하는 경우에 사용하던 방법입니다. 하위 디렉토리 또는 많은 파일을 한꺼번에 처리하기 위해서 예전에 사용했던 방법인데 셀스크립트 작성 기초로 참고 바랍니다.  iconv라는 명령은  파일의 인코딩을 변경하는데 사용하는 간단한 명령인데  iconv 명령을 응용해서 셀스크립트를 작성하d였고 다양한 파일을 처리하기 위한 방법으로 셀스크립트를 작성해 보았습니다.

[셀스크립트 응용] 
ICONV 을 이용한 파일 인코딩(Encoding)
ICONV와 SED 를 활용하여 파일의 문자셋(charset)을 변환 하는 방법

1. 개요

ICONV는 파일의 인코딩된 Character-set (이하 문자셋, Charset) 을 변환하는 리눅스 유틸리티 이다.

iconv 는 Multi Byte 한국어 인코딩인 EUC-KR과 CP949, ISO-2022-KR, JOHAB 방식을 모두 지원
GNU 에서 만든 문자열 변환 유틸리티(iconv) 및 라이브러리(libiconv)이다. 리눅스에는 glibc 에 포함되어 있으며 윈도는 gnuwin32 에서 받을 수 있다.

 

 

2. 사용법

iconv -f encoding [-t encoding] [inputfile]...
iconv 
-f  "현재 파일의 문자셋" -t "변환할 문자셋"  -o $OUTPUT_FILE  $INPUT_FILE 

[옵션 설명]
--from-code, -f encoding - 변환할 원본 인코딩을 명시
  iconv 는 encoding 을 자동으로 detect 하지 않으므로 원본 인코딩을 정확하게 명시해야 함

--to-code, -t encoding - 변환될 인코딩을 설정
--output, -o filename - 출력 파일명, 지정되지 않으면 콘솔로 출력됨

Korean EUC-KR, CP949, ISO-2022-KR, JOHAB

 

3.  사용 예시

iconv -f CP949   -t UTF-8    -o output.txt  input.txticonv 
iconv -f EUC-KR  -t UTF-8   -o output.txt  input.txticonv 
iconv -f euc-kr   -t utf-8     -o output.txt  input.txticonv 
iconv -f euckr    -t utf8      -o output.txt  input.txticonv 
※  EUC-KR, EUCKR, UTF-8, UTF8 등으로 사용 가능하다.

iconv -f UTF-8  -t US-ASCII//TRANSLIT -o output.txt input.txt

 

4. 다른 언어에서 문자치환

 

4.1 PHP에서 문자셋 치환 (www.php.net/manual/en/function.iconv.php)

 

  string iconv ( string $in_charset , string $out_charset , string $str )

 

<?php
$text = "This is the Euro symbol '€'.";
echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE : ',   iconv("UTF-8", "ISO-8859-1//IGNORE",   $text), PHP_EOL;
echo 'Plain : ',       iconv("UTF-8", "ISO-8859-1",                $text), PHP_EOL;
?>

 

Original : This is the Euro symbol '€'.
TRANSLIT : This is the Euro symbol 'EUR'.
IGNORE : This is the Euro symbol ''.
Plain : Notice: iconv(): Detected an illegal character in input string in .\iconv-example.php on line 7

 

 4.2 Node.js에서 문자셋 치환

iconv-lite는 시스템의 문자셋이 utf-8일 경우를 기준으로 작성하였다

$ npm install iconv-lite
let iconv = require('iconv-lite');
let fs = require('fs');

let content = fs.readFileSync('content-kr.txt');
console.log(content.toString());

let utf8Str = iconv.decode(content, 'euc-kr');
console.log(utf8Str);

// utf-8 text로 저장
fs.writeFileSync('content-utf-8.txt', utf8Str, { encoding: 'utf8'});

let euckrStr = iconv.encode(utf8Str, 'euc-kr');
console.log(euckrStr.toString());
// euc-kr text로 저장
fs.writeFileSync('content-euc-kr.txt', content, {encoding: 'binary'});

 

// iconv 모듈을 로딩합니다.
var iconv = require("iconv-lite"); 

// Convert from an encoded buffer to a js string
str =iconv.decode(Buffer.from([0x68, 0x65, 0x6c, 0x6c, 0x6f]), "utf8"); 

// 문자열을 인코딩된 버퍼로 변환합니다.
buf = iconv.encode("샘플 입력 문자열", "utf8");

//Check if encoding is supported
iconv.encodingExists("us-ascii");
728x90
반응형