Tracのソースビュアーで文字コードを自動判定する
ヤマロぶろぐ : Tracでファイルの文字コードを自動判定 - livedoor Blog(ブログ)やPython でエンコーディングを判定する - 傀儡師の館.Python - 楽天ブログ(Blog)あたりを参考にして入れてみた。
chardetだとあまり判定が良くなかったのでpykf使ってみた
--- api.py.orig 2009-05-01 11:41:16.000000000 +0900 +++ api.py 2009-05-01 12:35:32.000000000 +0900 @@ -71,6 +71,21 @@ from trac.util.text import to_utf8, to_unicode from trac.util.translation import _ +# For charset detection. +CHARSET_RE = re.compile(r'coding[=:]\s*(\S+)') + +try: + # http://archives.sertice.org/devs/linux/cvs/pykf-0.3.4.tgz + import pykf + pykf.setdefault(pykf.EUC) + pykf.setstrict(True) + PYKF_ENC = {pykf.UNKNOWN:None, pykf.ASCII:'ASCII', + pykf.SJIS:'SHIFT-JIS', pykf.EUC:'EUC-JP', + pykf.JIS:'ISO-2022-JP', pykf.UTF8:'UTF-8', + pykf.UTF16:'utf-16', pykf.UTF16_BE:'utf-16_be', + pykf.ERROR:None} +except ImportError: + pass __all__ = ['get_mimetype', 'is_binary', 'detect_unicode', 'Mimeview', 'content_to_unicode', 'Context'] @@ -824,6 +839,15 @@ utf = detect_unicode(content) if utf is not None: return utf + + m = CHARSET_RE.search(content, 0, 200) + if m: + return m.group(1) + + if 'pykf' in globals(): + encoding = PYKF_ENC[pykf.guess(content)] + if encoding != 'None': + return encoding return self.default_charset def get_mimetype(self, filename, content=None):
なにげに初python
created by blog.nomadscafe.jp
コメント
コメントを投稿
コメントを投稿するにはログインが必要です
はじめまして。
以下の環境で構築した時に参考にさせてもらいました。(かなり助かりました)
ただ、docやxlsなどのファイルをチケットに添付した場合、
ダウンロード時にはエラーが出るため、
return encoding -> return str(encoding)
と変更して使ってます。