로그 메시지 인코딩을 cp949에서 utf-8로 바꿔주는 방법

hey의 이미지

동일한 cvs 저장소를 윈도우와 리눅스에서 사용할 경우에 로그 메시지의 인코딩이 달라서 문제가 되는 경우가 있습니다. (물론 어떤 경우에도 인코딩이 다르면 문제겠지만; ) 그럴 때 다음과 같은 스크립트를 쓰면 모든 로그 메시지를 utf-8로 바꿔줍니다.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
file do_something_about_encoding.py
Title: 인코딩 어쩌구저쩌구.
Desc: 파일의 인코딩에 대해 뭔갈 하는 프로그램.

Author: Son, Kyeong-uk(hey_calm)

$Log: do_something_about_encoding.py,v $
Revision 1.1  2004/07/27 05:39:57  hey_calm
로그 메시지의 인코딩을 utf-8로 바꿔주는 기능 넣음.

"""
import os, sys

filename = ""

if __name__ == '__main__':
    if 1 < len(sys.argv):
        filename = sys.argv[1]

        command = "iconv -f cp949 -t utf-8 " + filename
        file = os.popen(command)
        content = file.read()
        res = file.close()

        if res is None:
            file = open(filename, "w")
            file.write(content)
            file.close()

pynoos님이 만드신 cvsnotify 등의 프로그램을 써보셨다면 CVSROOT를 체크아웃해보셨을 겁니다. 먼저 해당 저장소의 CVSROOT를 체크아웃하세요. 그리고 로그 정보를 검증할 때 이 스크립트가 불리도록 verifymsg에 다음과 같이

... 생략
#
# One thing that should be noted is the the ALL keyword is not
# supported.  There can be only one entry that matches a given
# repository.
DEFAULT                 $CVSROOT/CVSROOT/do_something_about_encoding.py

마지막에 한 줄을 넣으세요.
이 새로 만든 스크립트는 CVSROOT에 자동으로 체크아웃되어야 하므로 checkoutlist 파일의 마지막에

... 생략
# File format:
#
#       [<whitespace>]<filename>[<whitespace><error message>]<end-of-line>
#
# comment lines begin with '#'
do_something_about_encoding.py          로그 메시지 인코딩을 어떻게 좀 하는 프로그램

이렇게 넣어 주세요.

자 이제, utf-8과 cp949를 기본으로 사용하는 각각의 컴퓨터에 커밋을 해봅시다. :]

Forums: 
hey의 이미지

퍼키님과 미쓰님이 추천해주신 대로 교정해보았습니다. 로그 메시지가 utf-8일걸로 추측되거나 통 모르겠으면 변환 결과를 반영하지 않습니다. :]

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
file do_something_about_encoding.py
Title: 인코딩 어쩌구저쩌구.
Desc: 파일의 인코딩에 대해 뭔갈 하는 프로그램.

Author: Son, Kyeong-uk(hey_calm)

$Log: do_something_about_encoding.py,v $
Revision 1.6  2004/07/29 09:02:22  hey_calm
로그 메시지 변경 확인.

Revision 1.5  2004/07/29 08:59:55  hey_calm
로그 메시지를 euc-kr -> utf-8 -> cp949 순서대로 간주하고 인코딩 추측함.

Revision 1.4  2004/07/29 08:15:31  hey_calm
Revision 1.3  2004/07/29 07:58:32  hey_calm
iconv가 실패해도 에러 메시지 찍지 않게 바꿈.

Revision 1.2  2004/07/27 06:05:24  hey_calm
탭을 스페이스로 바꿈.

Revision 1.1  2004/07/27 05:39:57  hey_calm
로그 메시지의 인코딩을 utf-8로 바꿔주는 기능 넣음.

"""
import os, sys

filename = ""

if __name__ == '__main__':
    if 1 < len(sys.argv):
        filename = sys.argv[1]

        file    = open(filename, 'r')
        source = file.read()
        try:
            content = unicode(source, "euc-kr").encode("utf-8")
        except UnicodeError:
            try:
                unicode(source, "utf-8").encode("utf-8")
                content = None
            except UnicodeError:
                try:
                    content = unicode(source, "cp949").encode("utf-8")
                except UnicodeError:
                    content = None

        if content is not None:
            file = open(filename, "w")
            file.write(content)
            file.close()


----------------------------
May the F/OSS be with you..


pyrasis의 이미지

KLDP BBS는 시간이 지나면 글이 뭍혀서 잘 보이지도 않고..
검색하기도 쉽지가 않죠..

그래서 KLDP Wiki에 옮겨 봤습니다.

http://wiki.kldp.org/wiki.php/CVSLogMessageEncoding

페이지 이름은 제가 정해봤습니다만.. 더 좋은 이름 말씀해 주시면
바꾸도록 하겠습니다.

hey의 이미지

고맙습니다. :D


----------------------------
May the F/OSS be with you..


댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.