ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

nkf for pythonの入れ方と使い方

Webを操作する、ちょっとしたアプリを作る事にしまして、ごそごそしていたら、日本語コード変換したくなりました。
で、日本語コード変換といったら nkf だよなぁ。と思って、ぐぐるとヒット。


これを入れると、日本語コード変換を自動的に実施してくれるので非常に便利です。
↓以下に、自分が作ったテストコードをば。

#!/bin/env python
# -*- encoding: shift-jis -*-
import urllib
import nkf

def test_http_open(url):
    print "open:", url
    try:
        f = urllib.urlopen(url)
        print "success!!"
        body = f.read()
        
        t = body
        t = nkf.nkf("-s", t)
        print t
    except IOError:
        print "### timeout!!"

def main():
    test_http_open("http://www.python.jp/Zope/")

if __name__ == "__main__":
    ret = main()


上の例では、http://www.python.jp/Zope/ にアクセスして、HTMLを表示しています。
このサイトは、EUCで作成されている為、Windowsで表示させると化けます。

...
        <td class="xxsmaller" valign="top">
            <i><center>Copyright &copy; 2001-2006 Python Japan User's Group.</ce
nter><br>
<img src="http://www.python.jp/Zope/images/alert.gif" alt="キルケ・ height="15" wid
th="15" border="0" />ナ・オ・、・ネ、ホハクス顱ヲイ霖・硑ホ・ウ・鵐ニ・鵐ト、ホテ・賴「、マ。「ウニ・ウ・鵐ニ・鵐ト、
ホコ跑ョシヤ。「、筅キ、ッ、マニ・ワPython・譯シ・カイ颪ヒオ「ツー、キ、゙、ケ。」<br>

&nbsp;、゙、ソ。「ニ・ワPython・譯シ・カイ颪マ・オ・、・ネニ筅ホ・ウ・鵐ニ・鵐ト、ヒツセ、ホ・ラ・綋ー・鬣゚・鵐ークタク・ォ、
鬢ホセ隍・ケ、ィ、鰺カネッ、ケ、・イ、・ホ、「、・スクス、ャツソ。ケ、「、・ウ、ネ、鯒ァ、癸「ヘス、皃ェマヘ、モソス、キセ螟イ、゙、ケ。
」
</i>
        </td>
    </tr>
</table>

</body>
</html>


で、nkfに通すと、変換してくれます。

...
        <td class="xxsmaller" valign="top">
            <i><center>Copyright &copy; 2001-2006 Python Japan User's Group.</ce
nter><br>
<img src="http://www.python.jp/Zope/images/alert.gif" alt="警告" height="15" wid
th="15" border="0" />当サイトの文書・画像等のコンテンツの著作権は、各コンテンツ
の作成者、もしくは日本Pythonユーザ会に帰属します。<br>

&nbsp;また、日本Pythonユーザ会はサイト内のコンテンツに他のプログラミング言語から
の乗り換えを誘発する恐れのある表現が多々あることを認め、予めお詫び申し上げます。

</i>
        </td>
    </tr>
</table>

</body>
</html>

nkf for pythonを入れる際の注意

nkf for pythonを入れる時、SourceForge.jp: Project Info - nkf Network Kanji Filterからソースコードを入手して下さい。
ソースコードです。バイナリではありません。
READMEに、ちゃんと書いてますが、ここに一人少しばかり悩んだ阿呆がおります。(てへっ


NKFのソースは、nkf for pythonコンパイルするディレクトリの上位に配置して下さい。
でないと、NKF_python.c の77,78行の読み込みでエラーが起きます。

77: #include "../utf8tbl.c"
78: #include "../nkf.c"


ちゃんと配置すると、インストールが成功します。

$ python setup.py install
running install
running build
running build_ext
building 'nkf' extension
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\cl.exe /c /nologo /Ox
 /MD /W3 /GX /DNDEBUG -IC:\tool2\Python24\include -IC:\tool2\Python24\PC /TcNKF_
python.c /Fobuild\temp.win32-2.4\Release\NKF_python.obj
NKF_python.c
NKF_python.c(111) : warning C4244: '=' : 'double' から 'long' に変換しました。デ
ータが失われているかもしれません。
creating build\lib.win32-2.4
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\link.exe /DLL /nologo
 /INCREMENTAL:NO /LIBPATH:C:\tool2\Python24\libs /LIBPATH:C:\tool2\Python24\PCBu
ild /EXPORT:initnkf build\temp.win32-2.4\Release\NKF_python.obj /OUT:build\lib.w
in32-2.4\nkf.pyd /IMPLIB:build\temp.win32-2.4\Release\nkf.lib -s
LINK : warning LNK4044: オプション '/s' は無効です。無視されます。
   ライブラリ build\temp.win32-2.4\Release\nkf.lib とオブジェクト build\temp.win
32-2.4\Release\nkf.exp を作成中
running install_lib
copying build\lib.win32-2.4\nkf.pyd -> C:\tool2\Python24\Lib\site-packages

最初、NKF.exeを参照するのかと思ってたんですが、そういう訳じゃないです。
NKFのコードを.pydにモジュール化している次第です。