iconv 를 사용 하여 파일 인 코딩 을 자동 으로 판단 합 니 다.

1657 단어
프로젝트 를 할 때 파일 인 코딩 이 UTF - 8 이 므 로 GBK 로 임시 변환 해 야 하 며 시작 할 때 iconv 로 변환 하 는 것 은 간단 하 다.얼마 후 프로젝트 가 확대 되 었 습 니 다. 원본 코드 가 GBK 인 파일 을 처리 해 야 합 니 다. GBK 파일 이 iconv 에 변환 되 었 을 때 이 파일 자체 가 GBK 인 코딩 이면 오류 가 발생 하여 전체 셸 자동 처리 절 차 를 종료 합 니 다.왜 이러 지?
왜냐하면:iconv -f UTF-8 -t GBK file.name iconv 호출 명령 은 사용자 에 게 - f 인 자 를 입력 하도록 강제 합 니 다. 즉, 원본 파일 인 코딩 입 니 다. 파일 이 이 인 코딩 이 아니라면 오류 가 발생 할 수 있 습 니 다.iconv: illegal input sequence at position 0 구 글 에서 찾 아 보 니 모두 가 같은 해결 방안 을 사용 하 는 것 같 았 다. enca
저 는 이렇게 간단 한 일 을 위해 가방 을 하나 더 설치 하 는 것 을 별로 좋아 하지 않 습 니 다. 그리고 제 검색 을 통 해 프로젝트 에 사용 되 는 cygwin 플랫폼 에 이 가방 을 담 을 수 있 는 것 도 없습니다. 그러면 이 문 제 는 iconv 만 있 는 상황 에서 해결 할 수 없 습 니까?
물론 해결 할 수 있 습 니 다. 지금까지 이 프로젝트 는 두 가지 파일 인 코딩 에 만 관련 되 었 기 때문에 우 리 는 돌아 가면 서 문의 할 수 있 습 니 다.iconv -f utf8 file.name 1>/dev/null 2>/dev/null && echo 1
iconv -f gbk file.name 1>/dev/null 2>/dev/null && echo 2
또는 아예 이 인 코딩 여 부 를 함수 로 포장 합 니 다.isEnc () {
  local temp=`iconv -f $2 $1 1>/dev/null 2>/dev/null && echo 'true'`;
  if [ "$temp" = 'true' ]; then
    return 0;
  fi;
  return -1;
}
이렇게 사용:isEnc file.name utf8 && echo 'file is utf8'
isEnc file.name gbk && echo 'file is gbk'
그래서 누가 iconv 가 파일 인 코딩 형식 인식 을 할 수 없다 고 했 습 니까?물론 파일 을 자동 으로 인식 하 는 인 코딩 형식 은 할 수 없 지만 한 파일 에 지정 한 인 코딩 형식 이 있 는 지 물 어 볼 수 있 습 니 다. (인터넷 에 올 라 온 많은 enca 도 이 정도 밖 에 할 수 없 을 것 같 습 니 다. enca - L zh CN file 같은 인 자 를 사용 합 니 다)
네 디 끝까지!!stauren. net 은 바로 nedy blog!!we are jerks, we are geeks, we are nerds!!!!

좋은 웹페이지 즐겨찾기