trac에서 한글 인코딩 문제

choco6의 이미지

회사 프로젝트에 적용해 보려고 trac을 설치중에 있습니다.
익숙치 않고 지식이 없다보니 문제점을 해결 못하고 인터넷 찾아다니며 며칠째 고생하고 있네요..
먼저 한글 인코딩 문제입니다. 설정 파일인 trac.ini에서 default_charset이 기본으로 iso-8859-15로 설정되어 있는데 이것을 utf-8로 바꿔도 소스 보기에서 여전히 한글이 깨진 채 나옵니다. euc-kr이나 euc_kr, ko_KR.UTF-8, ko_kr.eucKR등 바꿔봤지만 모두 unknown encoding이라고 나오네요.. 아시는 분 조언 부탁드립니다.

그리고 지금 trac을 사용하시는 분들 중에서 trac을 사용하기 위해 svn의 소스 프로젝트 db 권한 설정을 바꿔줘야 하는지요. apache 데몬 실행 유저와 trac db 디렉토리를 모두 nobody로 설정했고 svn의 소스 프로젝트 db도 nobody로 read권한이 설정되어 있는데 trac에서 소스 보기 메뉴를 선택 하면 subversion exception으로 permission denied가 발생하는군요. 경험 있으신 분들의 이야기를 듣고 싶습니다.

익명 사용자의 이미지

게시판으로 뒤져보면 어떤 분이 소스 인코딩과 맞춰주면 된다고 하셨는데... 소스 인코딩이라 함은 subversion에 등록된 프로젝트 소스를 의미하는건지 잘 모르겟군요. subersion에 등록된 프로젝트 소스에 적용된 캐릭터 셋을 알 수가 있나요?

yong27의 이미지

소스보기에서 한글이 깨지는것은 소스의 한글 인코딩과 웹에서 보여주고자 하는 인코딩과 다르기 때문이 아닌가 합니다.

몇가지 테스트를 해봤는데요. 원래 소스가 utf-8이면 안깨집니다. http://biohackers.net/yongslib/file/fastaconvertor/README

이 경우, 만일 euc-kr 환경 (예, MS-Windows계열 등) 클라이언트에서 작업한 내용은 euc-kr 으로 저장이 될터이니, 기존 소스를 다 utf-8로 변경을 하시고, 프로그램 에디터도 utf-8로 세팅을 하셔서 쓰셔야 할것 같습니다.

그리고, svn을 apache로 사용하게 될 경우, 아파치 데몬유저의 쓰기가 가능해야 합니다. 그것때문에 권한에러가 나는듯합니다.

좀더 다이나믹하게~

choco6의 이미지

답변 감사합니다. yong27님.
먼저 클라이언트 환경은 윈도우즈 환경에서 tortoiseSVN을 쓰고 있으며 리눅스 서버로 commit을 하고 있습니다. 그럼 이것도 euc-kr로 저장이 되나요?.. tortoiseSVN 옵션을 봐도 characterset을 바꾸는 부분은 없던데요. 그리고 리눅스측 subversion에 등록되어 있는 소스를 어떻게 UTF-8로 바꾸는지도 조언 부탁합니다.

그런데 문제는 tortoiseSVN으로 commit한 소스는 trac에서 보면 한글이 몽땅 깨져 보인다는 이야기인데 소스를 commit할 때마다 svn에 등록된 소스를 일일이 UTF-8로 고친다는건 문제가 있을 듯 싶네요. 이것은 근본적인 해결책이 잇어야할텐데 trac에서 지원이 되는지 모르겠습니다.

그리고 svn에 소스를 등록할 때 apache를 거치지 않고 svn데몬으로 직접 commit하고 있습니다. 즉, svn://host.hostname 식으로 commit을 하고 있지요.. 이 경우도 svn의 db 권한을 변경시켜주어야만 하는건가요?

ktd2004의 이미지

trac의 db로 생성한 디렉토리의 conf/trac.ini 파일의 default_charset 값을 euc-kr로 설정하시면 euc-kr 형식의 소스(한글포함)를 웹에서 정상적으로 보실수 있을 것 같습니다.

저도 아직은 모든 소스가 euc-kr이라서... 완전히 utf8로 넘어가는게 제 경우에는 아직 이른 것 같습니다.

yong27의 이미지

http://projects.edgewall.com/trac/wiki/TracUnicode 에도 나와있듯이 trac은 utf-8만을 지원하는듯합니다.

euc-kr 인코딩의 소스를 trac으로 관리하려면 소스를 모두 utf-8로 옮기던가, 아니면, trac의 소스를 직접 고쳐서 euc-kr로 사용하던가 등의 방법이 있을 것 같네요.

참고로, trac소스를 보니까,

yong27@bhn:/usr/lib/python2.4/site-packages/trac$ grep utf-8 *.py -rn
Changeset.py:256:        self.req.send_header('Content-Type', 'text/plain;charset=utf-8')
Environment.py:261:        # We try to normalize the filename to utf-8 NFC if we can.
Environment.py:265:            filename = unicodedata.normalize('NFC', unicode(filename, 'utf-8')).encode('utf-8')
File.py:93:        self.mime_type = 'text/plain;charset=utf-8'
Module.py:100:        self.req.send_header('Content-Type', 'text/plain;charset=utf-8')
Notify.py:145:        msg = MIMEText(body, 'plain', 'utf-8')
Notify.py:151:        msg['Subject'] = Header(self.subject, 'utf-8')
Report.py:444:        self.req.send_header('Content-Type', 'text/plain;charset=utf-8')
Report.py:460:        self.req.send_header('Content-Type', 'text/plain;charset=utf-8')
Roadmap.py:106:        self.req.send_header('Content-Type', 'text/calendar;charset=utf-8')
Wiki.py:344:        self.req.send_header('Content-Type', 'text/plain;charset=utf-8')
core.py:324:        self.send_header('Content-Type', content_type + ';charset=utf-8')
util.py:106:    """Convert a string to utf-8, assume the encoding is either utf-8 or latin1"""
util.py:108:        # Do nothing if it's already utf-8
util.py:109:        u = unicode(text, 'utf-8')
util.py:118:        return u.encode('utf-8')
yong27@bhn:/usr/lib/python2.4/site-packages/trac$

저기에 표시된 utf-8 부분을 euc-kr 로 수동으로 바꿔주면 돌아갈듯도 합니다. (테스트는 안해봤습니다.)

좀더 다이나믹하게~

ktd2004의 이미지

Quote:

그리고 svn에 소스를 등록할 때 apache를 거치지 않고 svn데몬으로 직접 commit하고 있습니다. 즉, svn://host.hostname 식으로 commit을 하고 있지요.. 이 경우도 svn의 db 권한을 변경시켜주어야만 하는건가요?

svn 프로토콜을 사용해서 저장소에 접근할 경우 권한을 특별히 따로 설정할 필요는 없습니다.
하지만 apache를 통해 trac을 사용할 경우에는 subversion 저장소와 trac의 db 디렉토리에 대한 권한을 apache 유저의 권한으로 설정해 주셔야 합니다.

Quote:

http://projects.edgewall.com/trac/wiki/TracUnicode 에도 나와있듯이 trac은 utf-8만을 지원하는듯합니다.

utf-8로 저장한다는 의미는 wiki 데이터를 얘기하는듯 합니다.

저의 경우에는 다음의 명령으로 생성한 디렉토리의

# trac-admin /home/svn/MyProject.trac initenv

/home/svn/MyProject.trac/conf/trac.ini 파일의 default_charset 값을 euc-kr로 설정해서 euc-kr로 된 소스 파일을 이상없이 trac에서 보고 있습니다.

http://projects.edgewall.com/trac/wiki/TracIni
위 URL을 참고하시면 될 것 같습니다.

choco6의 이미지

KTD님의 말씀대로 trac.ini에 있는 default_charset을 euc-kr로 셋팅하면 다음과 같이 unknown encoding이라고 나옵니다.

Traceback (most recent call last):
File "/usr/lib/python2.3/site-packages/trac/core.py", line 531, in cgi_start
real_cgi_start()
File "/usr/lib/python2.3/site-packages/trac/core.py", line 526, in real_cgi_start
dispatch_request(path_info, args, req, env)
File "/usr/lib/python2.3/site-packages/trac/core.py", line 441, in dispatch_request
module.run()
File "/usr/lib/python2.3/site-packages/trac/Module.py", line 46, in run
disp()
File "/usr/lib/python2.3/site-packages/trac/Changeset.py", line 243, in display
self.render_diffs()
File "/usr/lib/python2.3/site-packages/trac/Changeset.py", line 239, in render_diffs
0, 1, 0, 1, self.pool)
File "/usr/lib/python2.3/site-packages/trac/Changeset.py", line 112, in apply_textdelta
self.print_diff (*file_baton)
File "/usr/lib/python2.3/site-packages/trac/Changeset.py", line 93, in print_diff
builder.writeline(util.to_utf8(line, charset))
File "/usr/lib/python2.3/site-packages/trac/util.py", line 114, in to_utf8
u = unicode(text, charset)
LookupError: unknown encoding: euc-kr

이게 왜 이럴까요. --;

yong27의 이미지

euc-kr 한글코덱이 없어서 그런듯합니다.

python 2.4 이상은 기본으로 들어가 있지만, 아닌 경우는 직접 설치해줘야 합니다. http://cjkpython.i18n.org/index-ko.html

제 생각에, 웹페이지의 encoding(trac 의 페이지)과 그 안의 내용 (svn 의 소스) 와 인코딩이 다르면 깨질 꺼라고 생각했는데, 그건 아닌가보군요.

좀더 다이나믹하게~

choco6의 이미지

아~ yong27님 정말 감사합니다~~
한글 코덱을 설치하니까 이제서야 trac에서 euc-kr 인코딩을 제대로 인식을 하는군요... yong27님 아니었으면 회사 서버에서 trac을 제거할 뻔했습니다.. 그럼 trac을 영영 못쓸뻔했네요..^^

그런데.. 혹시 ticket을 create할 때 component나 severity, milestone에 한글 아이템을 입력해 보셨는지요.. 아이템 이름을 한글로 넣으면... trac의 create 메뉴에서 항목이 여전히 깨져나오는군요.. 뭐.. 안된다면 어쩔 수 없지만.. 혹시나... 한글도 등록이 되는지 궁금해서요..

익명 사용자의 이미지

아이템에 한글을 쓰려면 코드에 손을 좀 대야되더군요... 그냥은 안되더라는..

yong27의 이미지

utf-8 환경을 쓰고 있는 저로서는 이상없이 잘 됩니다.

http://biohackers.net/yongslib/ticket/2

만일 euc-kr 환경이라면, 터미널을 utf-8로 바꾸신 후에, trac-admin 하면 될지도 모르겠네요.

좀더 다이나믹하게~

익명 사용자의 이미지

component나 milestone에 한글 아이템을 입력하고 IE와 같은 웹 브라우저로 보면 한글 아이템이 깨져 보이더군요.
trac.ini파일에 euc-kr로 셋팅하면 이렇게 되던데.. 해결책이 없나요?
utf-8로 설정하면 소스 한글이 깨져보이고, euc-kr로 셋팅하면 티켓의 한글 아이템 항목이 깨져보이고... 허 참..

agfe2의 이미지

위에서 알려주신 데로.

trac 에서 "euc-kr" 로 잘 되네요. 감사합니다. :D

trac 의 conf 폴더의 trac.ini 파일중에서
default_charset 의 값을 iso-8859-15에서 euc-kr로 바꾸고

trac 소스 python2.4/sitepackages/trac 및의
내용중 "utf-8" 로 된 것들을 "euc-kr"로 바꾸니,
한글이 잘 나오네요.
그전에는 Repository Browser에서 볼때
시간정보 (년/월/일) 이 깨져보였는데 잘 보입니다.

참고로 파일에서 "utf-8"을 "euc-kr"로 바꿀때는
역시 "문자열 치환"을 검색해서
아래와 같은 좋은 방식을 사용했습니다.

find . -name '*.py' -type f -exec perl -pi.bak -e 's/utf-8/euc-kr/g' {} \;

사랑과 평화 넘치는 행복한 세상을 꿈꾸며

ktd2004의 이미지

저는 trac의 소스를 직접 고치지 않고도
* 년월일..
* 한글 마일스톤등이 모두 입력 잘 됩니다.

제 환경은 다음과 같습니다.
* 사용하고 있는 trac 버전은 trac-0.9.4-ko 버전이고.
* trac.ini에는 euc-kr이 아닌 cp949로 설정했습니다.
* mod_python을 사용했습니다.

http.conf 파일의 설정은 다음과 같습니다.

<Location "/PROJECT">
  SetHandler mod_python
  PythonHandler trac.web.modpython_frontend
  PythonOption TracEnv /home/PROJECT.TRAC
  PythonOption TracLocale "ko_KR.utf8"
  SetEnv PYTHON_EGG_CACHE /home/SVN/PROJECT.TRAC
</Location>

제가 보기에는 "PythonOption TracLocale "ko_KR.utf8" 때문인것 같은데요... 다음 URL을 참고하시면 될 것 같습니다.

http://niceview.egloos.com/1789563/

시간이 나신다면 한번 더 삽질(?)을 해보시는게 어떨지요? ^^;
최고의 환경을 위해서요... ^^;

agfe2의 이미지

음. 좋은 정보에 감사드립니다.
trac 한글버전이 있었군요.
그것도 모르고 trac 0.9.4 영문버전을 설치했습니다.

생각해보니, apache 연동을 시키지 않고 ,
일단 그냥 단순히 tracd 를 돌렸네요.
아파치 연동후 알려주신 httpd.conf 를 사용해야 겠네요.

이기회에
trac-0.9.4-ko 를 설치하고
subversion 도 1.2.1에서 1.3.0 으로 업그레이드해야겠군요.

subversino 도 전에는 프로젝트별, 폴더별 사용자 권한 없이
그냥 단순하게 user/passwd 파일을 사용했는데
이기회에 인증도 제대로 해봐야겠습니다.

trac 설치후에야 말로 더 신경쓸일이 많아 보이는군요.
프로젝트별 구성이라던가, 사용자 지정, 권한 설정
마일스톤, 티켓의 활용방안,

아무튼 제대로 써보고 다시 글올리겠습니다.

사랑과 평화 넘치는 행복한 세상을 꿈꾸며

ogiwgi의 이미지

저도 예전에 이 문제로 질문을 올린적이 있었는데 해결을 못하고 있다가 이번에 파이썬을 하면서 cp949라는걸 알게되어 혹시나하고 trac.ini에서 cp949로 변경하니 한글이 정상적으로 나왔습니다.

제 환경은

WinXP + Apache + Python Module
Subversion 1.3.0
Trac 0.94 영문

입니다.

'뭐든지 하는 사람'부터 시작해야 '뭐든지 할 수 있는' 사람이 된다.

------------------------------------------------------------------------
'뭐든지 하는 사람'부터 시작해야 '뭐든지 할 수 있는' 사람이 된다.

free77의 이미지

위와 같은 문제인것 같은데요
인코딩을 euc-kr과 utf-8로 바꿔봐도 해결되지 않고 다음과 같이 에러메시지가 뜨네요.

No node at /02.e³μi?μ in revision 2651

You can search in the repository history to see if that path existed but was later removed.

TracGuide ? Trac의 사용자와 관리자 가이드

현재 버전은
windows2003(영문판) + python23 + trac 0.91(한글판)입니다.

ktd2004의 이미지

에러 메시지만 봐서는 인코딩 문제로는 보이지 않습니다.

해당 리비전(2651)에 node가 없다는 에러 같은데요...

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.